如何使用 Code-First EF 4.1 从数据库中删除多个项目

Posted

技术标签:

【中文标题】如何使用 Code-First EF 4.1 从数据库中删除多个项目【英文标题】:How to DELETE multiple items from database with Code-First EF 4.1 【发布时间】:2011-08-12 12:53:46 【问题描述】:

我们使用带有 DbContext 和 DbSet 的代码优先 EF 4 以及带有 DataAnnotations 的 POCO。 我是新手,似乎无法找到我的问题的答案:

如何直接从数据库中删除多个项目,而无需先使用 LINQ 选择项目,然后执行循环并在每次迭代时调用 Remove(item)?这对我来说似乎很愚蠢。

所有与此相关的引用都引用了似乎不存在的函数,例如我的 DbContext 中不存在的 DeleteOnSubmit(item)。此外,它只删除一项。

有没有更好的办法?

【问题讨论】:

【参考方案1】:

DeleteOnSubmit 是来自DataContext class= Linq-to-SQL 的函数

您不必在删除项目之前加载它。如果你知道它的关键就足够了。像这样的东西应该可以工作:

var item = new Item  Id = someId ;
context.Items.Attach(item);
context.Items.Remove(item);
context.SaveChanges();

var item = new Item  Id = someId ;
context.Items.Attach(item);
context.Entry(item).State = EntityState.Deleted;
context.SaveChanges();

如果不指定要删除的每个单个项目,则无法使用 EF 删除多个项目(级联删除除外)。如果要直接删除多个项目,则必须使用 SQL 之类的

context.Database.ExecuteSqlCommand("DELETE ...");

【讨论】:

【参考方案2】:

实体框架不支持一次多次删除,因为它需要内存中的对象。您需要遍历循环。

【讨论】:

以上是关于如何使用 Code-First EF 4.1 从数据库中删除多个项目的主要内容,如果未能解决你的问题,请参考以下文章

EF 4.1 Code-First 项目上的 MvcMiniProfiler 不分析 SQL

如何使用 EF Core Code-First 创建具有子类别的类别表? [复制]

如何使用EF Core Code-First桥接自己的表

如何使用 EF Code-First 插入/更新可更新视图

EF Code-First如何使用复合键从表中读取A.

如何将时态表添加到 EF Code-First DBContext?