c# - EF4 如何在多对多关系中公开连接表

标签 c# entity-framework entity-framework-4

假设我有以下表格:

Essence、EssenceSet 和 Essence2EssenceSet,其中 Essence2EssenceSet 仅包含前两个表的 ID,以形成 M:M 关系。

在 EF 中,由于 Essence2EssenceSet 没有其他字段,因此它不会在模型中公开。我发现当我已经拥有创建记录所需的 2 个 ID 但不一定加载 Essence 和 EssenceSet 记录(只是它们的 ID)时,我发现很难将记录插入该表

有没有办法告诉 EF 不要以这种方式建模并始终包含连接表?还是我缺少一种更简单的方法来创建这些连接表记录?

最佳答案

您也可以在 EF 中创建 M:N 关系而无需检索对象:

using (var context = new MyContext())
{
   var firstEntity = new FirstEntity { Id = firstId };
   var secondEntity = new SecondEntity { Id = secondId; }

   context.FirstEntities.Attach(firstEntity);
   context.SecondEntities.Attach(secondEntity);

   firstEntity.SecondEntities = new HashSet<SecondEntity>();
   firstEntity.SecondEntities.Add(secondEntity);

   context.SaveChanges();
}

无论如何,将联结表作为实体公开是可能的,但您将失去对 EF 的舒适感并回退到类似 SQL 的方法:

  1. 删除设计者创建的M:N关系
  2. 添加新实体
  3. 向表示外键的新实体添加两列
  4. 将新实体映射到联结表
  5. 将关联添加到相关实体
  6. 为添加的关系设置引用约束

关于c# - EF4 如何在多对多关系中公开连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5304087/

相关文章:

c# - WCF 流长度

c# - Reactive Extensions/Reactive UI 观察集合,将其分组并显示

c# - 如何将通用类型参数的值转换为具体类型?

c# - 默认发起成员(member)的结果是什么! C# .net 中的语句?

entity-framework - Entity Framework 合并选项不跟踪不良性能

entity-framework - 如何创建 Entity Framework ObjectContext?

c# - Linq to SQL 在访问属性之前检查对象上的空值

c# - 使用 Linq 获取帖子的投票计数

java - Hibernate 是否需要实体中的列名才能工作?

wpf - EF EntityObject 不更新关系的数据绑定(bind)