.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);