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语句.