首页 > 解决方案 > 有没有最好的方法来删除数据库中的非常多的数据,比如使用 Nhibernate 的 160k 数据

问题描述

我在使用 mssql 的表中有 120k 的数据,我必须删除所有数据才能再次保存,但它变得非常慢。

我有一个名为 InventarioEstoque 的实体,有两个孩子 InventariosEstoquesSaldos 和 InventariosEstoquesSaldosTerceiros,我试图删除 100 中的 100 并提交到数据库,但每 100 个数据需要一分钟以上,我在看控制台,也许是's 因为在查找级联删除时为孩子生成查询 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 更快地删除这些数据?

标签: nhibernatenhibernate-mappinglinq-to-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();

推荐阅读