繁体   English   中英

EF4如何以多对多关系公开连接表

[英]EF4 How to expose the join table in a many to many relationship

说我有以下表格:

Essence,EssenceSet和Essence2EssenceSet,其中Essence2EssenceSet仅包含前2个表的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. 为添加的关系设置参照约束

实体框架是一个ORM,因此,当您使用它时,您不应该根据表来考虑数据库,而是根据对象来考虑。 您不应该将标识插入到包含M2M关系的表中,但是您应该加载关系的一侧,这应该公开另一方的集合并将其添加到该集合。 对于M2M,您可能需要加载另一侧并执行相同操作。

此外,我相信EF更喜欢所有表都有一个列PK(我可能错了),但您可能需要向M2M添加一列并将其指定为PK。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM