如何用nhibernate批量删除?

Bla*_*man 5 nhibernate

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

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

New*_*bie 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();
            }
        }
Run Code Online (Sandbox Code Playgroud)


Vin*_*cha 6

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

session.Query<Cat>()
    .Where(c => c.BodyWeight > 20)
    .Delete();
Run Code Online (Sandbox Code Playgroud)

从 NHibernate 5.0 开始,Linq 查询可用于插入、更新或删除实体。查询定义要删除、更新或插入的数据,然后 Delete、Update、UpdateBuilder、InsertInto 和 InsertBuilder 可查询扩展方法允许删除它,或指示应以哪种方式更新或插入它。这些查询完全发生在数据库内部,而不会从数据库中提取相应的实体。

来源:http : //nhibernate.info/doc/nhibernate-reference/querylinq.html#querylinq-modifying