【问题标题】:One-to-one relation + on-to-many relation using same entity使用同一实体的一对一关系 + 一对多关系
【发布时间】:2018-03-07 19:13:36
【问题描述】:

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

无法确定“客户”类型的导航属性“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 会很好地添加迁移,所以我很肯定这与这两种不同的关系有关。

【问题讨论】:

    标签: c# entity-framework-core


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多