nhibernate - 有没有最好的方法来删除数据库中的非常多的数据,比如使用 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 更快地删除这些数据?
解决方案
using NHibernate.Linq
在顶部添加一条语句并使用DmlExtensionMethods.Delete
扩展方法:
var itensDelete = UnitOfWork.InventariosEstoques.All()
.Where(x => dates.Contains(x.Data.Date) && x.OrigemInventario == OrigemInventarioEstoque.FechamentoEstoque)
.Delete();
UnitOfWork.SaveChanges();
推荐阅读
- python - DJANGO: How to specify primary key in fixture when the primary key is not "id"
- java - 通过 https 连接到私有 ip 时出现“没有主题替代名称”错误
- java - 构造可取消 Java 任务的 DAG
- c++ - MacOS - 如何部署 C++ 应用程序
- c# - 实体框架表 MVC 和 API 中的数据不匹配
- r - 无法将带有意大利重音字符的 CSV 正确导入 R
- r - 如何获得一周内的所有时间?
- java - 类投影中的 Spring Data ClassCastException
- typescript - 在带有 eslint 的 Typescript 中使用非 Typescript 库
- php - PHP从EXCEL返回数据,这些数据未使用for-each函数()保存在数据库中