gpt4 book ai didi

c# - 当对象与上下文分离时如何删除 EF6 中的对象列表

转载 作者:太空狗 更新时间:2023-10-29 23:13:22 25 4
gpt4 key购买 nike

好的,我可以像这样删除 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();
}
}

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

是否有比执行 foreach 更有效的方法?并一次设置一个状态?

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

The object cannot be deleted because it was not found in the 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();

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

关于c# - 当对象与上下文分离时如何删除 EF6 中的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35868066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com