RavenDB - 使用" / conflicts"删除以前冲突的文档在网址

时间:2015-09-21 14:20:36

标签: ravendb

我正在尝试以编程方式删除一次冲突的文档,这些文档不再存在冲突,但仍在Raven中显示为重复文件。

E.g。如果我查询实体属性的索引,我知道它是唯一的,我得到两个文件

  1. 带有网址实体的文件A / 12345
  2. 带有URL实体的文档B / 12345 / conflicts / 54321
  3. 我的目标是删除文件B.

    将文档A加载到会话中不会抛出ConflictException,因为它不再被标记为冲突。我可以通过Web UI删除文档B,但是还不能通过代码来删除它,因为我只能通过流在瞬态上下文中看到它。

    以下是一些示例代码,用于解释在尝试解决此问题时我从各种客户端调用中获取的内容...

    using (var enumerator = session.Advanced.Stream(query))
    {
        while (enumerator.MoveNext()))
        {
            var entity = enumerator.Current.Document;
    
            // This attempt to get the id returns null
            var id = session.Advanced.GetDocumentId(entity);
    
            // Throws InvalidOperationException
            var url = session.Advanced.GetDocumentUrl(entity);
    
            // Returns null, so can’t use session to delete
            session.Load<TEntity>(entity);
    
            // Does nothing, with string ID of entity
            session.Advanced.Defer(new DeleteCommandData { Key = entity.Id.ToString() });
    
            // Does nothing
            session.Advanced.DocumentStore.DatabaseCommands.Delete(entity.Id.ToString(), null);
        }
    
        session.SaveChanges();
    }
    

    感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我发现在上面的示例中使用enumerator.Current.Key为我提供了我所关注的文档的关键。