Entity framework EntityFramework:仅在主键的情况下删除m2m关联。怎样

Entity framework EntityFramework:仅在主键的情况下删除m2m关联。怎样,entity-framework,Entity Framework,我有两个实体a和b,它们之间有一个m2m关联。实体a和b在my DbContext中加载,而m2m关联则不加载。现在,在我的程序中,我知道a和b的主键,我需要删除m2m关联 当然,我可以从数据库中重新加载并包含其m2m关联。但是,这需要到数据库的额外往返才能从数据库中获取实体 我还可以先将a从DbContext中分离,然后将b添加到其BSet,然后再次附加a,然后调用remove,例如: context.Entry(a).State = EntityState.Detached; a.Bset.

我有两个实体a和b,它们之间有一个m2m关联。实体a和b在my DbContext中加载,而m2m关联则不加载。现在,在我的程序中,我知道a和b的主键,我需要删除m2m关联

当然,我可以从数据库中重新加载并包含其m2m关联。但是,这需要到数据库的额外往返才能从数据库中获取实体

我还可以先将a从DbContext中分离,然后将b添加到其BSet,然后再次附加a,然后调用remove,例如:

context.Entry(a).State = EntityState.Detached;
a.Bset.Add(b)
context.Set(typeof(A)).Attach(a);
a.BSet.Remove(b)
然而,通过将a从其上下文中分离出来,然后附加它,我失去了对a所做的更改。因此,调用SaveChanges()可能不会将对数据库的所有更改持久化

我的问题是:如何删除a和b之间的m2m关联,而不需要额外的数据库往返,也不丢失对a或b所做的任何更改

[编辑:我正在寻找一种方法a.BSet.Attach,它可以让我在一个en-b之间附加一个现有的m2m关联]

我正在使用最新版本的Entity Framework和DbContext

欢迎任何帮助

附:这是一份

提前感谢,


Merijn

几天前我遇到了同样的问题,我提出的解决方案是:

context.Entry(a).State = EntityState.Detached;
a.BSet.Add(b);
context.Entry(a).State = EntityState.Modified;
a.BSet.Remove(b);
使用该代码,您应该删除m2m关联并保留对数据库的所有更改

编辑:
我刚刚意识到,我们已经编写了几乎相同的代码,只需重新连接实体,将其状态更改为“已修改”。

您好,谢谢您的帮助。不幸的是,这适用于属性,但不适用于关联。特别是,分离a时,a的新M2M关系将消失。当将a的EntityState设置为EntityState.Modified后,它们将不会返回。