.net core EFCore多对多关系,两端为同一个表

.net core EFCore多对多关系,两端为同一个表,.net-core,entity-framework-core,many-to-many,ef-core-3.1,.net Core,Entity Framework Core,Many To Many,Ef Core 3.1,我想跟踪用户的推荐。有两个实体类 public class User { public string FirstName { get; set; } public string LastName { get; set; } public string Email { get; set; } public string Phone { get; set; } public ICollection<Referral> Referrals { ge

我想跟踪用户的推荐。有两个实体类

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string Phone { get; set; }

    public ICollection<Referral> Referrals { get; set; }
    public ICollection<Referral> Referrees { get; set; }
}

public class Referral
{
    public long ReferrerId { get; set; }
    public long ReferreeId { get; set; }

    public virtual User Referrer { get; set; }
    public virtual User Referree { get; set; }
}
但当我尝试添加迁移时,我得到了

无法确定导航所表示的关系 类型为“用户”的属性“reference.referer”。或者手动配置 或使用“[NotMapped]”忽略此属性 属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”

错误


我做错了什么?

除了缺少PKs(我猜你只是忘记在帖子中包含PKs),你在这里展示的内容没有什么错。确保所示的关系fluent代码实际执行,因为当您离开上述模型而没有fluent配置时,会发生异常。是的,为了简化问题,我排除了一些东西,包括PKs。它确实会被执行,因为当我删除referer属性时,迁移会成功创建。将
public long-Id{get;set;}
添加到
User
+
builder.HasKey(r=>new{r.refererid,r.refereid})添加到您的代码中,并且在没有问题的情况下添加了迁移。
builder.HasOne(r => r.Referrer).WithMany(u => u.Referrals).HasForeignKey(r => r.ReferrerId);
builder.HasOne(r => r.Referree).WithMany(u => u.Referrees).HasForeignKey(u => u.ReferreeId);