如何在Entity Framework中添加或删除多对多关系?
有一个多对多的UserFeed
表位于User
和Feed
之间,表示类似Twitter的跟随关系。
它只有两个字段,形成一个复合键: UserID
和FeedID
。
我需要编写一个方法,根据布尔标志从订阅源订阅或取消订阅用户。
public void SetSubscriptionFlag (int userId, int storeId, bool subscribe) { }
我是Entity Framework的新手,所以我试图找到并遵循“EF-ish”方式来实现这一目标。
我最初的想法是:
- 我应该创建一个多对多的
Subscriptions
属性( 编辑:这里的命中限制 ),而不是使用中间的UserFeed
类; - 在我这样做之后,我需要通过ID获取
User
实例,检查它是否在其Subscriptions
提供了Feed
并根据标志和当前存在添加/删除它; - 在检查和添加/删除之前有一段时间间隔并且用户设法提交两个添加或删除请求时,弄清楚如何避免竞争冲突;
- 优化我的代码,以避免不必要的SELECT,如果有的话,因为我真正想做的只是一个SELECT和单个INSERT / DELETE。
我非常感谢您对我的观点的相关代码段和评论。
谢谢!
你可以使用虚拟对象 – 它肯定适用于插入,我希望它也可以用于删除:
创建新关系:
var user = new User() { Id = userId }; context.Users.Attach(user); var store = new Store() { Id = storeId }; context.Stores.Attach(store); // Now context trackes both entities as "existing" // and you can build a new relation user.Subscriptions.Add(store); context.SaveChanges();
删除现有关系:
var user = new User() { Id = userId }; var store = new Store() { Id = storeId }; user.Subscriptions.Add(store); context.Users.Attach(user); // Now context trackes both entities as "existing" // with "existing" relation so you can try to remove it user.Subscriptions.Remove(store); context.SaveChanges();