【问题标题】:Bulk delete using Ravendb使用 Ravendb 批量删除
【发布时间】:2015-03-12 21:54:48
【问题描述】:

我正在尝试使用以下逻辑从 RavenDB 的集合中删除文档 ID

    var documentstore = new DocumentStore
{
    Url = "http://localhost:8080",

    DefaultDatabase = "Employee"
};
documentstore.Initialize();
using (var session = documentstore.OpenSession())
{

    var test = new List<string>();

    test.Add("emps/81993");
    test.Add("emps/40319");

    var w1 = session.Load<Employee>(test);
    session.Delete(w1);
    session.SaveChanges();
}

我收到以下错误

Models.Employee[] 与会话没有关联,无法删除未知的

如何从集合中批量删除文档 ID?

谢谢

【问题讨论】:

标签: c# ravendb


【解决方案1】:

您正在尝试删除员工数组,而不是每个员工本身。当你在 Load 中传入一个 Enumerable 时,你会得到一个包含每个实体的数组。

试试这个:

using (var session = documentstore.OpenSession())
{
    var test = new List<string>();

    test.Add("emps/81993");
    test.Add("emps/40319");

    Employee[] employees = session.Load<Employee>(test);
    foreach (var employee in employees)
    {
        session.Delete(employee);
    }

    session.SaveChanges();
}

为了进一步解释,返回的数组没有被 RavenDb 的 UoW 跟踪,但是数组中的每个单独的项目都是,这就是为什么你会收到关于 Employee[] 的消息与会话无关。

【讨论】:

    【解决方案2】:

    您可以使用基于集合的操作。 以下代码将查询特定索引并删除与查询匹配的所有内容

    var operation = store.DatabaseCommands.DeleteByIndex("Index Name", new IndexQuery
                {
                    Query = "Lucene query of stuff to delete"
                }, options: null);
    


    例如,以下代码将从名为“Companies”的文档集合中删除所有文档(摘自 RavenDB 单元测试之一)

    var operation = documentStore.DatabaseCommands.DeleteByIndex("Raven/DocumentsByEntityName", new IndexQuery
                {
                    Query = "Tag:[[Companies]]"
                });
    

    您可以阅读更多in this link to RavenDB documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 2012-04-17
      • 2014-09-18
      • 1970-01-01
      • 2014-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多