1

我有一个用户和一个组织类。他们看起来像这样

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 属性,我会得到一个连接表,这正是我正在寻找的。 正确的数据库生成

这是一个简单的实体框架问题,我需要在使用流利的映射中提供多对多配置,还是我做错了什么?

4

1 回答 1

1

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

注意:如果您在相同类型之间有多个关系(例如,假设您定义了 Person 和 Book 类,其中 Person 类包含 ReviewedBooks 和 AuthoredBooks 导航属性,而 Book 类包含 Author 和 Reviewer 导航属性),您需要使用 Data Annotations 或 fluent API 手动配置关系

这是来自微软的文章。

于 2012-11-14T03:20:22.517 回答