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生成的数据库在存在多个关系时不创建连接表的主要内容,如果未能解决你的问题,请参考以下文章

MySQL8:连接查询

ef5.0 怎么连接mysql

数据库数据的查询----连接查询

Hibernate映射

Mysql数据库连接查询

mysql数据库视图