Entity Framework Core一对多

3

我正在尝试使用Entity Framework Core构建电话列表。每当我尝试运行命令:Add-Migration "Initial"

我会收到以下错误信息:无法确定类型为'Team'的导航属性'Member.MemberTeam'所表示的关系。请手动配置该关系,或从模型中忽略此属性。

以下是我的模型:

public class Member {
        public int Id { get; set; }
        public string MemberName { get; set; }
        public string MemberTitle { get; set; }
        public Member MemberSupervisor { get; set; }
        public Team MemberTeam { get; set; }
    }

public class Team {
    public int Id { get; set; }
    public string TeamName { get; set; }
    public Member TeamSupervisor { get; set; }
    public ICollection<Member> TeamMembers { get; set; }
}

有什么建议吗?

1个回答

4

团队(Team)和成员(Member)以及成员之间存在多种关系。如果你只有这个模型...

public class Member
{
    public int Id { get; set; }
    public string MemberName { get; set; }
    public string MemberTitle { get; set; }
    public Team MemberTeam { get; set; }
}
public class Team
{
    public int Id { get; set; }
    public string TeamName { get; set; }
    public ICollection<Member> TeamMembers { get; set; }
}

如果EF不需要任何帮助,它会理解Team.TeamMembersMember.MemberTeam是同一个关联的两个端点。

现在,如果您只添加...

public Member TeamSupervisor { get; set; }

EF必须选择这是否是与MemberTeam具有一对一关联的反向端,还是除了一对多关联之外的新关联。然而,EF不会为您选择,您必须通过显式映射关联来明确指示它。例如(在您的DbContext子类中):

protected override void OnModelCreating(ModelBuilder mb)
{
    mb.Entity<Team>().Property(a => a.Id).UseSqlServerIdentityColumn();
    mb.Entity<Team>().HasMany(t => t.TeamMembers).WithOne(m => m.MemberTeam);
    mb.Entity<Team>().HasOne(t => t.TeamSupervisor).WithMany()
                     .HasForeignKey("SupervisorId");

    mb.Entity<Member>().Property(a => a.Id).UseSqlServerIdentityColumn();
    mb.Entity<Member>().HasOne(m => m.MemberSupervisor).WithMany()
                       .HasForeignKey("SupervisorId");
}

谢谢。这个完美地运行了。我仍在努力学习C#和ASP.Net。 - tscrip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接