FBr*_*t87 4 c# entity-framework delete-row
我在聚簇索引上删除了大约5000行我的表,而EF需要将近30秒才能完成.
记录生成的SQL显示它正在为每一行执行一次删除:
DELETE [dbo].[Table]
WHERE ([ColumnID] = @0)
Run Code Online (Sandbox Code Playgroud)
所以共有5000笔交易.
我已经尝试批量调用SaveChanges(),但这似乎没有提高性能,或改变上述行为.
//loop
{
//get batch
db.Table.RemoveRange(batch);
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
我看了一些其他问题,指出了每行执行删除命令的这个缺陷,但之后没有提出建议: 如何在Entity Framework中删除多行(没有foreach)
有没有办法阻止EF每行执行一个命令?如果可能的话,我想避免使用内联SQL.
oct*_*ccl 10
不幸的是,这是RemoveRange
方法的正常行为.你可以看到这个答案后了解更多详情(查看引用的文本).
一个选项可能是使用EntityFramework扩展库 nuget包,它允许您创建批处理以在一次往返中删除行:
//delete all rows where FirstName matches
db.Table
.Where(u => u.FirstName == "firstname")// just an example
.Delete();
Run Code Online (Sandbox Code Playgroud)
如果您不想使用其他第三方库,则始终可以选择执行原始sql stamement:
db.ExecuteStoreCommand("DELETE FROM Table WHERE FirstName = {0}", firstname);
Run Code Online (Sandbox Code Playgroud)
但我认为你正在寻求第一个解决方案;).
归档时间: |
|
查看次数: |
257 次 |
最近记录: |