如何删除实体框架中的多行(没有 foreach) [英] How do I delete multiple rows in Entity Framework (without foreach)

查看:8
本文介绍了如何删除实体框架中的多行(没有 foreach)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用实体框架从表中删除几个项目.没有外键/父对象,因此我无法使用 OnDeleteCascade 处理此问题.

I'm deleting several items from a table using Entity Framework. There isn't a foreign key / parent object so I can't handle this with 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,对吗?

It works but the foreach bugs me. I'm using EF4 but I don't want to execute SQL. I just want to make sure I'm not missing anything - this is as good as it gets, right? I can abstract it with an extension method or helper, but somewhere we're still going to be doing a foreach, right?

推荐答案

如果你不想执行 SQL,直接在循环中调用 DeleteObject 是你今天能做的最好的事情.

If you don't want to execute SQL directly calling DeleteObject in a loop is the best you can do today.

但是,您可以执行 SQL 并通过扩展方法使其完全通用,使用我描述的方法 此处.

However you can execute SQL and still make it completely general purpose via an extension method, using the approach I describe here.

虽然那个答案是针对 3.5 的.对于 4.0,我可能会在后台使用新的 ExecuteStoreCommand API,而不是使用 StoreConnection.

Although that answer was for 3.5. For 4.0 I would probably use the new ExecuteStoreCommand API under the hood, instead of dropping down to the StoreConnection.

这篇关于如何删除实体框架中的多行(没有 foreach)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆