EF5生成的数据库在存在多个关系时不创建连接表
Posted
技术标签:
【中文标题】EF5生成的数据库在存在多个关系时不创建连接表【英文标题】:Database Generated by EF5 Not Creating Join Table When There are Multiple Relationships 【发布时间】:2012-11-13 22:25:11 【问题描述】:我有一个用户和一个组织类。它们看起来像这样
public class User
public int UserId get; set;
public string UserName get; set;
public string Email get; set;
public string FirstName get; set;
public string LastName get; set;
public virtual ICollection<Organization> Organizations get; set;
public class Organization : EntityBase
public string Name get; set;
public string Description get; set;
public virtual ICollection<User> Users get; set;
并且两者都继承自 EntityBase 类以获取公共字段,如 Id 和创建/更新跟踪。
public abstract class EntityBase
public int Id get; set;
public DateTime Created get; set;
public virtual User CreatedBy get; set;
public DateTime Updated get; set;
public virtual User UpdatedBy get; set;
正如两者的 ICollection 属性所示,应该存在多对多关系。但是,当我的数据库自动生成时,我的表中添加了不正确的外键
如果我将 CreatedBy 和 UpdatedBy 更改为字符串而不是 User 属性,我会得到一个连接表,这正是我正在寻找的。
这只是实体框架的问题,我需要在使用流利的映射中提供多对多配置,还是我做错了什么?
【问题讨论】:
【参考方案1】:如果您有多个关系,您需要通过 fluent API 或使用属性手动配置它们,
注意:如果您在相同类型之间有多个关系(例如 例如,假设您定义了 Person 和 Book 类,其中 Person 类包含 ReviewedBooks 和 AuthoredBooks 导航 属性和 Book 类包含 Author 和 Reviewer 导航属性)您需要手动配置 通过使用 Data Annotations 或 fluent API 来建立关系
Here is the article from Microsoft.
【讨论】:
以上是关于EF5生成的数据库在存在多个关系时不创建连接表的主要内容,如果未能解决你的问题,请参考以下文章