繁体   English   中英

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

[英]One-to-one relation + on-to-many relation using same entity

我正在尝试创建一个具有多个联系人以及一个主要联系人的客户实体,但是由于出现以下错误,我似乎无法添加迁移:

无法确定由“客户”类型的导航属性“ 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; }
}

联系人

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可以很好地添加迁移,因此我很肯定这与两个不同的关系有关。

我设法使用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)
    );
}

暂无
暂无

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

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