有没有最好的方法来删除数据库中的非常多的数据,例如使用Nhibernate删除160k的数据

问题描述 投票:0回答:1

我在使用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更快地删除此数据?

nhibernate nhibernate-mapping linq-to-nhibernate
1个回答
0
投票

在顶部添加using NHibernate.Linq语句并使用DmlExtensionMethods.Delete扩展方法:

var itensDelete = UnitOfWork.InventariosEstoques.All()
    .Where(x => dates.Contains(x.Data.Date) && x.OrigemInventario == OrigemInventarioEstoque.FechamentoEstoque)
    .Delete();

UnitOfWork.SaveChanges();
© www.soinside.com 2019 - 2024. All rights reserved.