如何使用nhibernate进行批量删除?

如何使用nhibernate进行批量删除?,nhibernate,Nhibernate,如何使用nhibernate删除项目,而不首先提取内存中的所有对象 这是可能的还是必须使用原始sql?使用ExecuteUpdate方法。下面的代码将成批提交批量删除。这在NHibernate2.1.0中起作用。(不确定以前的版本) foreach(在GetBatches(记录,\u batchSize)中列出批) { 使用(ITransaction事务=_session.BeginTransaction()) { _CreateQuery(String.Format(“从(:idsList)”

如何使用nhibernate删除项目,而不首先提取内存中的所有对象


这是可能的还是必须使用原始sql?

使用ExecuteUpdate方法。下面的代码将成批提交批量删除。这在NHibernate2.1.0中起作用。(不确定以前的版本)

foreach(在GetBatches(记录,\u batchSize)中列出批)
{
使用(ITransaction事务=_session.BeginTransaction())
{
_CreateQuery(String.Format(“从(:idsList)”中的Id所在的{0}删除,_domainObject.Name))
.SetParameterList(“idsList”,batch.ToArray())
.ExecuteUpdate();
Commit();
}
}

从NHibernate 5开始,您可以使用以下语法:

session.Query<Cat>()
    .Where(c => c.BodyWeight > 20)
    .Delete();
session.Query()
.式中(c=>c.体重>20)
.Delete();
从NHibernate 5.0开始,Linq查询可用于插入、更新或删除实体。查询定义要删除、更新或插入的数据,然后定义delete、update、UpdateBuilder、InsertInto和InsertBuilder可查询扩展方法,这些方法允许删除数据,或指示更新或插入数据的方式。这些查询完全发生在数据库内部,而不从数据库中提取相应的实体

资料来源:

session.Query<Cat>()
    .Where(c => c.BodyWeight > 20)
    .Delete();