User
和 Feed
之间有一个多对多的 UserFeed
表,表示类似 twitter 的关注关系。
它只有两个字段,它们构成一个复合键:UserID
和 FeedID
。
我需要编写一个方法来根据 bool 标志订阅或取消订阅用户的订阅。
public void SetSubscriptionFlag (int userId, int storeId, bool subscribe)
{
}
我是 Entity Framework 的新手,所以我正在尝试寻找并遵循“EF-ish”方式来完成此任务。
我最初的想法是:
- 与其使用中间的
UserFeed
类,我应该创建一个多对多的Subscriptions
属性(编辑: 在此处点击 limitations ); - 完成后,我需要通过 ID 获取一个
User
实例,检查它是否在其Subscriptions
中提供了Feed
code> 并根据标志和当前存在添加/删除它; - 想办法避免在检查和增删之间有时间间隔,用户成功提交了两次增删请求时,如何避免竞速冲突;
- 优化我的代码以避免不必要的 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();
关于c# - 如何在 Entity Framework 中添加或删除多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6264361/