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

标签 .net database c#-4.0 entity-framework-4.1

我们使用带有 DbContext 和 DbSet<> 的代码优先 EF 4 以及带有 DataAnnotations 的 POCO。 我对此很陌生,似乎无法找到我的问题的答案:

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

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

有更好的方法吗?

最佳答案

DeleteOnSubmit 是来自 DataContext 类 = Linq-to-SQL

的函数

在删除项目之前不必加载它。如果你知道它的 key 就足够了。像这样的东西应该有效:

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 ...");

关于.net - 如何使用 Code-First EF 4.1 从数据库中删除多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7040364/

相关文章:

.net - 是否可以使用 WCF 服务而不是 WCF 数据服务来实现服务器端分页

sql - 如何在大型数据库的 sqlite 中为数据表行分配索引?

数据表中的 C# 地理列

.net - 从 SQL Server 表中选择扩展属性

javascript - HTML5 网络应用程序 - 选择服务器端技术

.net - 我应该如何确定哪些引用必须是 "copied locally"?

mysql - 所有数据库表中 CreatedDate 和 ModifiedDate 列的优缺点

c# - 我怎样才能同时声明和填充一个类

c# - 无标题但可移动的 WinForms 表单

mysql - MySQL MVCC 用于构建先前快照的高级算法