【发布时间】:2018-05-30 09:47:19
【问题描述】:
您好,我正在尝试在 .net mvc 应用程序中使用 EF6 从表中删除 4-5k 行
我为此使用 RemoveRange,如果它有 100-200 行,它会在几秒钟内完成。但是当我尝试删除几千条记录时,需要很长时间(10 分钟以上)
using (someEntites dc = new someEntites())
{
var listForRemoval = (from a in dc.someTable
where a.Year == 2018 && a.month == 04
select a).ToList();
if (listForRemoval != null)
{
dc.someTable.RemoveRange(listForRemoval);
dc.SaveChanges();
}
}
我尝试禁用 AutoDetectChangesEnabled 但这没有帮助。
还有其他(相对简单的)方法可以从 db 表中删除更大的数据块吗?
-- p.s 编写简单的删除 - 在 sql 中需要一秒钟才能完成
【问题讨论】:
-
你能创建一个 SQL 语句来删除行并执行 SQL 语句吗?应该比任何 EF 的东西表现得更好。
-
相对简单快捷的方法是手动执行“DELETE”查询。现在您首先向客户端获取几千条记录,然后删除它们(查询效率低下)。 EF 还有各种“扩展”,允许使用 LINQ 语法来实现。
-
如果您想删除所有行...您可以手动执行 TRUNCATE 查询。
-
我已经看到了使用扩展的解决方案,并试图暂时避免这种情况。我使用 (ExecuteSqlCommand) 编写了原始查询,而且速度更快,我只是不喜欢使用直接 sql 命令。无论如何谢谢:)
-
不是重复的 Marco,我已经看到了该主题,但它并没有解决我的问题。丹尼尔我不想删除所有记录只在哪里指定的选择
标签: c# asp.net-mvc linq entity-framework-6