使用Ravendb批量删除

时间:2015-03-11 17:17:28

标签: c# ravendb

我正在尝试使用以下逻辑

从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?

由于

2 个答案:

答案 0 :(得分:2)

您正在尝试删除员工阵列,而不是每个员工本身。在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 []的消息与会话无关。

答案 1 :(得分:1)

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

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