NHibernate:如何删除一组对象?

myn*_*kow 2 nhibernate

假设我们有 100 个 User 类型的对象,每个用户都有一个一对一的引用。NHibernate 配置中的批量大小设置为 50。因此,如果我们删除所有 100 个对象,NHibernate 将触发 200 个与数据库的连接。我想用 4 个连接删除它们,每个连接中有 50 个查询。下面的代码是我的批量插入方法的复制/粘贴,其按预期工作:

public void BatchDelete(IEnumerable<T> entitiesToDelete)
    {
        int batchSzie = Session.GetSessionImplementation().Batcher.BatchSize;
        int batchedInsertsCount = 0;
        foreach (var entity in entitiesToDelete)
        {
            batchedInsertsCount++;
            Session.Delete(entity);
            if (batchedInsertsCount % batchSzie == 0)
            {
                Session.Flush();
                Session.Clear();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

编辑:我忘了提及我正在进行交易。

Pet*_*ter 5

            Session.Flush();
            Session.Clear();
Run Code Online (Sandbox Code Playgroud)

通常表明您做错了什么,开始添加事务并删除:

if (batchedInsertsCount % batchSzie == 0)
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用删除和 in 进行查询:

            // fill batch with id list of items you want to delete
            _session.CreateQuery(String.Format("DELETE  FROM TABLENAME WHERE Id IN (:idsList)", _domainObject.Name))
                    .SetParameterList("idsList", batch.ToArray())
                    .ExecuteUpdate();
Run Code Online (Sandbox Code Playgroud)

确保检查 2100 个最大 ID,这是您可以提供给 sqlserver 的参数的最大值。