Entity Framework6.1.2 多对多

Entity Framework 6.1.2 Many to Many

我在使用 entity framework 6.1.2 时遇到问题。我敢肯定这之前已经涵盖过,但我无法在任何地方找到它。在构建数据库时 entity framework 不会为我拥有的两个列表项创建关系,因为我将它们声明为上面的单个实体。

有什么解决办法吗?

public class SomeClass
{
    public TeamMember LeadPartner { get; set; }
    public Team Team { get; set; }
    public List<TeamMember> OtherTeamMembers { get; set; }
    public List<Team> OtherTeams { get; set; }
}

抱歉,如果在我真的找不到任何内容之前有人问过这个问题。

很可能另一个类有歧义。例如,如果您在 Team 中定义了 List<SomeClass>,EF 无法确定此 属性 是否与 public Team Team 合作(这将创建一对多关系) 或 public List<Team> OtherTeams(创建多对多关系)。两者都有效。

要解决歧义,请将 [InverseProperty("OtherTeams")] 注释添加到另一个 类 中的 List<SomeClass>

此外,最佳做法是将 属性 公开为 ICollection<T> 而不是 List<T>,在构造函数中创建 new List<T> 或其他内容。这允许您稍后更改实现,例如改用 HashSet<T>

在您的 DbContext.OnModelCreating 覆盖中添加类似于以下内容的映射:

modelBuilder.Entity<SomeClass>()
            .HasMany<TeamMember>(sc => sc.OtherTeamMembers)
            .HasMany();
         // .HasMany(tm => tm.SomeClassNavigationPropertyList);