c# - 如何在 Entity Framework 中添加或删除多对多关系?

标签 c# entity-framework entity-framework-4 linq-to-entities many-to-many

UserFeed 之间有一个多对多的 UserFeed 表,表示类似 twitter 的关注关系。
它只有两个字段,它们构成一个复合键:UserIDFeedID

我需要编写一个方法来根据 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/

相关文章:

mysql - 使用 Entity Framework 从数据库中获取标识列中最后一个自动插入的 ID

c# - 创建没有自动增量 ID 的 Entity Framework 表

asp.net-mvc - MVC 更新 .edmx 文件(.msl、.csdl、.ssdl)

sql - 在 Entity Framework (SQL Server)中做 "either/or"关系的好方法

entity-framework-4 - 这个映射有什么问题吗?

c# - 使用 Microsoft.ApplicationInsights.NLogTarget 的 Azure Application Insights 中没有日志条目

c# - 将 C# SerialPort 连接到 Hyper-V 命名管道(就像 PuTTy 一样)

c# - 通用参数不可分配

c# - 什么是 C snprintf() 的 C# 模拟?

c# - 在发送到数据库之前,使 EF 将可转换为字符串类型的属性转换为字符串