作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 Entity Framework 从表中删除多个项目。没有外键/父对象,因此我无法使用 OnDeleteCascade
处理此问题。
现在我正在这样做:
var widgets = context.Widgets
.Where(w => w.WidgetId == widgetId);
foreach (Widget widget in widgets)
{
context.Widgets.DeleteObject(widget);
}
context.SaveChanges();
它可以工作,但是 foreach
让我烦恼。我正在使用 EF4,但我不想执行 SQL。我只是想确保我没有遗漏任何东西——这已经是最好的了,对吧?我可以使用扩展方法或助手来抽象代码,但我们仍然会在某个地方执行 foreach
,对吗?
最佳答案
EntityFramework 6 通过 .RemoveRange()
让这一切变得更容易。
示例:
db.People.RemoveRange(db.People.Where(x => x.State == "CA"));
db.SaveChanges();
警告!不要在大型数据集上使用它!
EF 将所有数据拉入内存,然后将其删除。对于较小的数据集,这可能不是问题,但通常会避免这种删除方式,除非您可以保证只进行很小的更改。
您可以轻松地在内存不足的情况下运行进程,而 EF 会愉快地提取您指定的所有数据以将其删除。
关于entity-framework - 如何在 Entity Framework 中删除多行(不使用 foreach),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2519866/
我是一名优秀的程序员,十分优秀!