如何在不首先拉出内存中的所有对象的情况下删除带有nhibernate的项目?
这可能还是我必须使用原始sql?
答案 0 :(得分:8)
使用ExecuteUpdate方法。下面的代码将批量提交批量删除。这适用于NHibernate 2.1.0。 (不确定以前的版本)
foreach (List<int> batch in GetBatches(records, _batchSize))
{
using (ITransaction transaction = _session.BeginTransaction())
{
_session.CreateQuery(String.Format("DELETE FROM {0} WHERE Id IN (:idsList)", _domainObject.Name))
.SetParameterList("idsList", batch.ToArray())
.ExecuteUpdate();
transaction.Commit();
}
}
答案 1 :(得分:3)
从NHibernate 5开始,您可以使用以下语法:
session.Query<Cat>()
.Where(c => c.BodyWeight > 20)
.Delete();
从NHibernate 5.0开始,Linq查询可用于插入,更新或删除实体。查询定义要删除,更新或插入的数据,然后删除,更新,UpdateBuilder,InsertInto和InsertBuilder可查询扩展方法允许删除它,或指示应以何种方式更新或插入。这些查询完全发生在数据库中,无需从数据库中提取相应的实体。
来源:http://nhibernate.info/doc/nhibernate-reference/querylinq.html#querylinq-modifying