如何在从上下文中分离对象时删除EF6中的对象列表

Joh*_*Doe 5 c# entity-framework entity-framework-6

好的我可以删除EF6中的单个项目,如下所示:

public void DeleteUserGroup(MY_GROUPS ug)
{
    using (var context = new MYConn())
    {
        var entry = context.Entry(ug);
        if (entry.State == EntityState.Detached)
        {
            context.MY_GROUPS.Attach(ug);
        }

        context.MY_GROUPS.Remove(ug);
        context.SaveChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果此方法从传递单个实例MY_GROUPS更改为List<MY_GROUPS>如何处理删除?

有没有更有效的方法,然后只做一次foreach并设置一个状态?

更新:我已经在使用与上述RemoveRange方法类似的方法.但是我收到一个错误:

无法删除该对象,因为在ObjectStateManager中找不到该对象.

我正在寻找将对象列表附加到上下文的最佳方法,以便我可以删除它们.

Ale*_*rck 3

为了能够删除记录,您需要确保您ObjectContext正在跟踪它们。现在你有分离的对象,并且你的上下文不知道它们,所以不可能删除它们。删除它们的一种方法是像您所说的那样,Attach将所有对象添加到上下文中,然后删除它们。另一种方法是从数据库中获取记录,以便您可以删除它们:

//Find all groups in database with an Id that is in your group collection 'ug'
var groups = context.My_Groups.Where(g => ug.Any(u => u.Id == g.Id));
context.My_Groups.RemoveRange(groups);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

但是,请注意,即使在使用 时,删除命令也会针对您要删除的每个RemoveRange项目发送到数据库。和唯一的区别是第一个只会调用一次,这确实可以提高性能。RemoveRangeRemoveDetectChanges