使用 Ravendb 批量删除
Bulk delete using 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[] is not associated with the session, cannot delete unknown
如何从集合中批量删除文档 ID?
谢谢
您正在尝试删除员工数组,而不是每个员工本身。当您在 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[] 的消息与会话无关的原因。
您可以使用基于集合的操作。
以下代码将查询特定索引并删除与查询匹配的所有内容
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]]"
});
我正在尝试使用以下逻辑从 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[] is not associated with the session, cannot delete unknown
如何从集合中批量删除文档 ID?
谢谢
您正在尝试删除员工数组,而不是每个员工本身。当您在 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[] 的消息与会话无关的原因。
您可以使用基于集合的操作。 以下代码将查询特定索引并删除与查询匹配的所有内容
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]]"
});