繁体   English   中英

Entity Framework Core 一对多

[英]Entity Framework Core One to Many

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

我收到以下错误: Unable to determine the relationship represented by navigation property 'Member.MemberTeam' of type 'Team'. Either manually configure the relationship, or ignore this property from the model. Unable to determine the relationship represented by navigation property 'Member.MemberTeam' of type 'Team'. Either manually configure the relationship, or ignore this property from the model.

这是我的模型:

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

有什么建议吗?

TeamMember之间以及从MemberMember之间有多种关系。 如果你只有这个模型......

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的一对一关联的反向端,还是除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");
}

我知道这个问题已经很老了,但如果你在这里,这可以帮助你。

为了解决这些关系问题,您可以使用Has/With 模式

使用 fluent api 有两种选择来解决这个问题。

选项 1:1 到 N

modelBuilder.Entity<Team>()
  .HasMany(t => t.TeamMembers)
  .WithOne(t => t.MemberTeam);

选项 2:向后设置。

modelBuilder.Entity<Member>()
  .HasOne(t => t.MemberTeam)
  .WithMany(t => t.TeamMembers);

注意:默认情况下,该关系是可选的,但如果您需要它存在,您可以设置.IsRequired()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM