我遇到了实体框架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; }
}
很抱歉,如果在我真的无法找到任何内容之前询问过这个问题。
答案 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);