如何用nhibernate批量删除?

时间:2010-02-18 23:28:15

标签: nhibernate

如何在不首先拉出内存中的所有对象的情况下删除带有nhibernate的项目?

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

2 个答案:

答案 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