假设我有以下表格:
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 的方法:
- 删除设计者创建的M:N关系
- 添加新实体
- 向表示外键的新实体添加两列
- 将新实体映射到联结表
- 将关联添加到相关实体
- 为添加的关系设置引用约束
关于c# - EF4 如何在多对多关系中公开连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5304087/