实体框架6.1.2多对多

时间:2015-01-22 02:09:44

标签: c# asp.net-mvc entity-framework

我遇到了实体框架6.1.2的问题。我确定之前已经介绍过,但我无法在任何地方找到它。在构建数据库实体框架时,不会为我拥有的两个列表项创建关系,因为我将它们声明为上面的单个实体。

有没有解决这个问题?

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; }
}

很抱歉,如果在我真的无法找到任何内容之前询问过这个问题。

2 个答案:

答案 0 :(得分:4)

其他课程中很可能存在歧义。例如,如果List<SomeClass>中定义了Team,则EF无法确定此属性是否与public Team Team(可创建一对多关系)或{{ 1}}(创建许多关系)。两者都有效。

要解决歧义,请在其他课程的public List<Team> OtherTeams中添加[InverseProperty("OtherTeams")]注释。

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

答案 1 :(得分:1)

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

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