我有两个实体a和b以及它们之间的m2m关联。实体a和b在我的DbContext中加载,而m2m关联则不是。现在,在我的程序中,我知道a和b的主键,我需要删除m2m关联。
当然,我可以从数据库中重新加载一个并包含它的m2m关联。但是,这需要额外往返数据库以从数据库中获取实体。
我还可以先从DbContext中分离出一个,然后将b添加到其BSet中,然后再附加一个,然后调用删除类似的内容:
context.Entry(a).State = EntityState.Detached;
a.Bset.Add(b)
context.Set(typeof(A)).Attach(a);
a.BSet.Remove(b)
然而,通过从其上下文中删除然后附加它,我放弃了对a进行的更改。因此,调用SaveChanges()可能不会将a的所有更改都保留到数据库中。
我的问题是:如何在没有额外往返数据库的情况下删除a和b之间的m2m关联,而不会丢失对a或b的任何更改?
[编辑:我正在寻找的方法是a.BSet.Attach,它可以让我在en b之间附加现有的m2m关联]
我正在使用最新版本的Entity Framework,而我正在使用DbContext。
欢迎任何帮助。
的转贴提前致谢,
Merijn
答案 0 :(得分:0)
几天前我遇到了同样的问题,我提出的解决方案是:
context.Entry(a).State = EntityState.Detached;
a.BSet.Add(b);
context.Entry(a).State = EntityState.Modified;
a.BSet.Remove(b);
使用该代码,您应该删除m2m关联并保留对数据库的所有更改。
编辑: 我刚刚意识到我们已经制作了几乎相同的代码,只需重新附加你的实体,将其状态改为'Modified'。