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

有没有最好的方法来删除数据库中的数据,比如使用Nhibernate删除160k的数据,nhibernate,nhibernate-mapping,linq-to-nhibernate,Nhibernate,Nhibernate Mapping,Linq To Nhibernate,我使用mssql在一个表中存储了120k的数据,我必须删除所有数据才能再次保存,但速度非常慢 我有一个名为InventarioEstoque的实体,有两个孩子InventariosEstoquesSaldos和InventarioSesToquesSaldosOrcerios,我试图删除100个,并提交到数据库,但每100个数据需要一分钟以上的时间,我看着控制台,可能是因为在查找级联删除时,正在为孩子生成查询N+1 我最后尝试的代码是 var itensDelete = UnitOfWork.I

我使用mssql在一个表中存储了120k的数据,我必须删除所有数据才能再次保存,但速度非常慢

我有一个名为InventarioEstoque的实体,有两个孩子InventariosEstoquesSaldos和InventarioSesToquesSaldosOrcerios,我试图删除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.Linq语句添加
,并使用
DmlExtensionMethods。删除
扩展方法:

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

UnitOfWork.SaveChanges();

在Sql Server中,是否为关系启用了级联删除?