gpt4 book ai didi

NHibernate:如何删除一组对象?

转载 作者:行者123 更新时间:2023-12-02 07:43:36 24 4
gpt4 key购买 nike

假设我们有 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();
}
}
}

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

最佳答案

            Session.Flush();
Session.Clear();

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

if (batchedInsertsCount % batchSzie == 0)

另一种方法是使用 delete 和 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();

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

关于NHibernate:如何删除一组对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8645131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com