使用相同实体的一对一关系+多对多关系

时间:2018-03-07 19:13:37

标签: c# entity-framework-core

我正在尝试创建一个拥有多个联系人的客户实体,以及一个主要联系人,但我似乎无法添加迁移,因为我收到以下错误:

  

无法确定“客户”类型的导航属性“ContactPerson.Customer”所代表的关系。手动配置关系,或使用'[NotMapped]'属性或在'OnModelCreating'中使用'EntityTypeBuilder.Ignore'忽略此属性。

客户

public class Customer
{
    public Guid CustomerId { get; set; }
    public string Name { get; set; }
    public DateTime CreateDate { get; set; }
    public string City { get; set; }
    public string Address { get; set; }

    // Contact person data
    public virtual ContactPerson PrimaryContactPerson { get; set; }
    public virtual ICollection<ContactPerson> ContactPersons { get; set; }
}

ContactPerson

public class ContactPerson
{
    public Guid ContactPersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual Customer Customer { get; set; }
}

我尝试在Customer实体以及ContactPerson实体上自己添加外键,并使用我的实体注释外键属性,如下所示:

public class ContactPerson
{
    public Guid ContactPersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    [ForeignKey("Customer")]
    public Guid CustomerId { get; set; }
    public virtual Customer Customer { get; set; }
}

但它似乎没有任何区别,我仍然得到同样的错误。 EF无法确定这种关系怎么样?

我认为它与一对一关系同时存在的一对一关系有关,但我似乎无法解决这个问题。建议和建议非常感谢!

如果我注释掉PrimaryContactPerson属性,EF会很好地添加迁移,所以我很肯定这与两种不同的关系有关。

1 个答案:

答案 0 :(得分:0)

我设法使用Entity Framework Fluent API解决了我的问题,如下所示:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<ContactPerson>(e =>
        e.HasOne(r => r.Customer).WithMany(c => c.ContactPersons)
    );
}