使用Entity Framework4.3删除System.Data.Entity.DbSet中的所有元素的最佳方式是什么?

推荐答案

dbContext.Database.ExecuteSqlCommand("delete from MyTable");

(不是Jest .)

问题是EF不支持任何批处理命令,使用直接DML删除集合中所有实体的唯一方法是:

foreach (var entity in dbContext.MyEntities)
    dbContext.MyEntities.Remove(entity);
dbContext.SaveChanges();

或者,为了避免加载完整的实体,可能会稍微便宜一点:

foreach (var id in dbContext.MyEntities.Select(e => e.Id))
{
    var entity = new MyEntity { Id = id };
    dbContext.MyEntities.Attach(entity);
    dbContext.MyEntities.Remove(entity);
}
dbContext.SaveChanges();

但在这两种情况下,您都必须加载all个实体或all个键属性,并从集合中逐个删除实体.此外,当您调用SaveChanges时,EF将向数据库发送n(=集合中的实体数量)DELETE语句,这些语句也会在DB中逐个执行(在单个事务中).

因此,对于此目的,直接SQL显然更可取,因为您只需要一条DELETE语句.

.net相关问答推荐

在PowerShell中,XML子对象和属性是对象属性.它怎麽工作?

无法在 Blazor Server 应用程序中触发 InputRadio 的 onchange 事件

移位比Java中的乘法和除法更快吗? .网?

C#6.0 字符串插值本地化

如何在 C# 中创建表达式树来表示String.Contains("term")?

.NET 中是否有一种简单的方法来获得数字的st、nd、rd和th结尾?

具有透明背景且包含不透明控件的 WPF 窗口

如何在 C# 4.0 中使任务进入睡眠状态(或延迟)?

File.ReadAllLines() 和 File.ReadAllText() 有什么区别?

C#:内存不足异常

我应该从 .NET 中的 Exception 或 ApplicationException 派生自定义异常吗?

实体框架无法加载指定的元数据资源

什么是 project.lock.json?

无法加载文件或程序集'System.ComponentModel.Annotations,版本 = 4.1.0.0

.Net 正则表达式:单词字符 \w 是什么?

ReaderWriterLockSlim 什么时候比简单的锁更好?

如何防止任务的同步延续?

IEnumerable vs IReadonlyCollection vs ReadonlyCollection 用于公开列表成员

判断任意字符串是否为有效文件名的最简单方法

在 .NET 中乘以时间跨度