我在使用mssql的表中有120k的数据,我必须删除所有内容以再次保存,但速度非常慢。
[我有一个名为InventarioEstoque的实体,有两个孩子InventariosEstoquesSaldos和InventariosEstoquesSaldosTerceiros,我试图在100中删除100个并提交到数据库,但是每100个数据要花一分钟多的时间,我在看控制台,可能是因为寻找级联删除时正在为孩子生成查询N + 1。
我尝试的最后一个代码是这个
var itensDelete = UnitOfWork.InventariosEstoques.All().Where(x => dates.Contains(x.Data.Date) && x.OrigemInventario == OrigemInventarioEstoque.FechamentoEstoque).Select(x => x.Id);
while (itensDelete.Any())
{
var idsDelete = itensDelete.Take(100).ToList();
UnitOfWork.InventariosEstoques.Delete(x => idsDelete.Contains(x.Id));
UnitOfWork.SaveChanges();
}
是否可以使用Nhibernate更快地删除此数据?
在顶部添加using NHibernate.Linq
语句并使用DmlExtensionMethods.Delete
扩展方法:
var itensDelete = UnitOfWork.InventariosEstoques.All()
.Where(x => dates.Contains(x.Data.Date) && x.OrigemInventario == OrigemInventarioEstoque.FechamentoEstoque)
.Delete();
UnitOfWork.SaveChanges();