在UserFeed
和User
之间有一对多Feed
表,表示类似Twitter的关系。
它只有两个字段,形成一个复合键:UserID
和FeedID
。
我需要编写一个方法,根据布尔标记订阅或取消订阅Feed中的用户。
public void SetSubscriptionFlag (int userId, int storeId, bool subscribe)
{
}
我是Entity Framework的新手,所以我试图找到并遵循“EF-ish”方式来实现这一目标。
我最初的想法是:
UserFeed
属性(编辑:点击limitations),而不是使用中间Subscriptions
类。 User
个实例,检查是否已在其Feed
中提供Subscriptions
并根据其添加/删除它国旗和现在的存在; 我非常感谢您对我的观点的相关代码段和评论。
谢谢!
答案 0 :(得分:7)
你可以使用虚拟对象 - 它肯定适用于插入,我希望它也可以用于删除:
建立新关系:
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();