首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EntityFramework:移除仅给定主键的m2m关联。多么?

EntityFramework:移除仅给定主键的m2m关联。多么?
EN

Stack Overflow用户
提问于 2012-11-16 21:20:47
回答 1查看 133关注 0票数 1

我有两个实体a和b以及它们之间的m2m关联。实体a和b被加载到我的DbContext中,而m2m关联却没有。现在,在我的程序中,我知道了a和b的主键,并且我需要删除m2m关联。

当然,我可以从数据库-reload a并包括它的m2m关联。但是,这需要到数据库的额外往返,以便从数据库中获取实体。

我还可以首先从DbContext中分离a,然后将b添加到它的BSet中,然后再次附加a,然后调用remove,如下所示:

代码语言:javascript
复制
context.Entry(a).State = EntityState.Detached;
a.Bset.Add(b)
context.Set(typeof(A)).Attach(a);
a.BSet.Remove(b)

但是,通过将a与其上下文分离,然后附加它,我丢失了对a所做的更改。因此,调用SaveChanges()可能不会将a的所有更改持久化到数据库中。

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

编辑:我正在寻找的是一个方法a.BSet.Attach,它使我能够在en和b之间附加现有的m2m关联

我使用的是最新版本的实体框架,我使用的是DbContext。

欢迎任何帮助。

PS。这是http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/5edea208-24cc-497b-8592-9cb025d558e4/的转载

提前谢谢你,

Merijn

EN

回答 1

Stack Overflow用户

发布于 2012-11-16 22:03:03

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

代码语言:javascript
复制
context.Entry(a).State = EntityState.Detached;
a.BSet.Add(b);
context.Entry(a).State = EntityState.Modified;
a.BSet.Remove(b);

使用该代码,您应该删除m2m关联并保留对数据库的所有更改。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13417463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档