gpt4 book ai didi

c# - EntityFramework 6.0 每行生成一个 DELETE

转载 作者:太空狗 更新时间:2023-10-30 00:18:28 26 4
gpt4 key购买 nike

我要删除聚集索引表中的大约 5000 行,而 EF 需要将近 30 秒才能完成。

记录生成的 SQL 显示它正在对每一行执行一次删除:

DELETE [dbo].[Table]
WHERE ([ColumnID] = @0)

所以总共有5000笔交易。

我试过批量调用 SaveChanges(),但这似乎并没有显着提高性能,也没有改变上述行为。

//loop
{
//get batch
db.Table.RemoveRange(batch);
db.SaveChanges();
}

我看过其他一些指出每行执行删除命令的缺陷的问题,但之后没有提出任何建议: How do I delete multiple rows in Entity Framework (without foreach)

是否有任何方法可以阻止 EF 每行执行一个命令?如果可能,我想避免使用内联 SQL。

最佳答案

不幸的是,这是 RemoveRange 方法的正常行为。您可以在这个 post 中看到答案了解更多详情(查看引用的文字)。

一个选项可能是使用 EntityFramework Extended Library nuget 包,它允许您创建一个批处理以在一次往返中删除行:

 //delete all rows where FirstName matches
db.Table
.Where(u => u.FirstName == "firstname")// just an example
.Delete();

如果您不想使用其他第 3 方库,您始终可以选择执行原始 sql stamement:

db.ExecuteStoreCommand("DELETE FROM Table WHERE FirstName = {0}", firstname);

但我认为您正在追求第一个解决方案;)。

关于c# - EntityFramework 6.0 每行生成一个 DELETE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36285220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com