EntityFramework 6.0每行生成一个DELETE

时间:2016-03-29 13:07:54

标签: c# entity-framework delete-row

我在聚集索引上删除了大约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。

1 个答案:

答案 0 :(得分:10)

不幸的是,这是frame方法的正常行为。您可以在此post中查看答案以获取更多详细信息(请参阅引用文字)。

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

RemoveRange

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

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

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