2017-08-17 106 views
1

我刚刚将我的解决方案/项目从.NET Core 1.1升级到2.0,包括EntityFramework Core。我现在正在从EF Core 1.1中得到一个我从未得到的错误。EF核心2.0无法确定关系

“无法确定由'Person'类型的导航属性'InsurancePolicy.Person'表示的关系。”

类/实体定义如下。

public class InsurancePolicy 
{ 
    [Key] 
    public Guid Id { get; set; } 

    [ForeignKey("InsuranceCompanyId")] 
    public InsuranceCompany InsuranceCompany { get; set; } 
    [Required] 
    public int InsuranceCompanyId { get; set; } 

    [ForeignKey("PersonId")] 
    public Person Person { get; set; } 
    [Required] 
    public Guid PersonId { get; set; } 

    [ForeignKey("PolicyHolderId")] 
    public Person PolicyHolder { get; set; } 
    [Required] 
    public Guid PolicyHolderId { get; set; } 

    public string GroupId { get; set; } 
    public string MemberId { get; set; } 
} 

如果我删除Person/PersonId属性,我只是得到相同的错误,但在不同的实体/属性。还有其他事情正在发生,或者EF 2.0中的这种做法发生了变化。这与EF 1.1一起工作良好,我能够运行我的迁移并部署数据库。在升级到2.0之后,我无法调用我的DbContext而没有得到上述错误。

+0

你能告诉关系的其他部分,即'Person'类和相关的流利配置。 –

+0

这是一个众所周知的但在EF 2.0中。他们正在跟踪https://github.com/aspnet/EntityFrameworkCore/issues/9180。 –

+0

哇,我以为EF核心2.0是**稳定**和**推荐**(至少这是文档说的) –

回答

2

这是EF 2.0中已知的issue

目前的工作是使用Fluent API显式定义关系。

例如(从提供的链接):如果任何

modelBuilder.Entity<Relation>(e => 
    { 
     e.HasOne(r => r.AccountManager).WithMany(u => u.AccountManagerRelations).HasForeignKey(r => r.AccountManagerId); 
     e.HasOne(r => r.SalesManager).WithMany(u => u.SalesManagerRelations).HasForeignKey(r => r.SalesManagerId); 
    });