如何使用 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