【问题标题】:Entity Framework Core One to Many实体框架核心一对多
【发布时间】:2016-10-26 17:46:52
【问题描述】:

我正在尝试使用 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.

这是我的模型:

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

有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

    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 的一对一关联的反向端,还是一对多关联之外的新关联。但是,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。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2019-05-06
    相关资源
    最近更新 更多