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中找不到该对象.
我正在寻找将对象列表附加到上下文的最佳方法,以便我可以删除它们.
为了能够删除记录,您需要确保您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