当存在多个关系时,EF5生成的数据库不创建连接表

时间:2012-11-13 22:25:11

标签: entity-framework code-first entity-framework-5

我有一个User和一个Organization类。他们看起来像这样

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属性表示,应该存在多对多关系。但是,当我的数据库自动生成时,我会在表格中添加不正确的外键 Incorrect mapping of Organization and User tables

如果我将CreatedBy和UpdatedBy更改为字符串而不是用户属性,我会得到一个连接表,这就是我想要的。 Correct database generation

这是实体框架的问题,只是混淆了,我需要在使用流畅的映射中提供多对多配置,或者我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果您有多个关系,则需要通过流畅的API或使用属性手动配置它们,

  

注意:如果相同类型之间有多个关系(for   例如,假设您定义了Person和Book类,其中   Person类包含CommentsBooks和AuthoredBooks导航   属性和Book类包含作者和审阅者   导航属性)您需要手动配置   使用数据注释或流畅的API

的关系

Here is the article from Microsoft.