如何使用实体框架快速删除表中的所有行?
我目前正在使用:
var rows = from o in dataDb.Table
select o;
foreach (var row in rows)
{
dataDb.Table.Remove(row);
}
dataDb.SaveChanges();
但是,执行需要很长时间。
有没有其他选择?
原文由 Zhenia 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何使用实体框架快速删除表中的所有行?
我目前正在使用:
var rows = from o in dataDb.Table
select o;
foreach (var row in rows)
{
dataDb.Table.Remove(row);
}
dataDb.SaveChanges();
但是,执行需要很长时间。
有没有其他选择?
原文由 Zhenia 发布,翻译遵循 CC BY-SA 4.0 许可协议
1 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读
1 回答829 阅读
我的解决方案,混合了我的想法,一些答案(来自这个线程的 Ron 一个,还有 这个 和 这个 用于反思)并试图涵盖一些不同的条件。
它基于 EF6,但应该可以正常工作,只需修复一些扩展,例如
GetTableName<TEntity>
。我的解决方案:
DbSet
来启动RemoveRange
或 SQL 执行之间做出决定,以避免性能问题DELETE
而不是TRUNCATE
,以避免外键问题(它必须符合您的要求,当然)对于名为
Entries
的数据库表,您所要做的就是:如果您想保存更改,或者您不想:
它基于反射,以简化代码。当然,它有一些性能折衷,但是每个表都会发生一次反射,因此在这些条件下应该是完全可以接受的。