我正在尝试以编程方式删除一次冲突的文档,这些文档不再存在冲突,但仍在Raven中显示为重复文件。
E.g。如果我查询实体属性的索引,我知道它是唯一的,我得到两个文件
我的目标是删除文件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();
}
感谢任何帮助!
答案 0 :(得分:0)
我发现在上面的示例中使用enumerator.Current.Key
为我提供了我所关注的文档的关键。