2016-03-01 99 views
0

我正面临EF7反转属性的问题。有两个像这样连接的实体。InverseProperty实体框架7

public class Employee 
    { 
     public int Id { get; set; } 
    } 

public class Review 
{ 
    public int Id { get; set; } 

    [Required] 
    public virtual Employee Employee { get; set; } 

    [Required] 
    public Employee Manager { get; set; } 
} 

我想,当我开始询问我的员工访问的评论列表,所以我试图做到这一点:

public class Employee 
    { 
     public Employee() 
     { 
      Reviews = new List<Review>(); 
     } 
     public int Id { get; set; } 

     [InverseProperty("Employee")] 
     public virtual ICollection<Review> Reviews { get; set; } 
    } 

这样,查询质量不好,并返回该错误:

Invalid column name 'EmployeeId1'

这是哪里出了错误的查询部分:

SELECT [ua].[Id], [r].[EmployeeId], [r].[EmployeeId1], [r1].[EmployeeId], [r1].[EmployeeId1] 
FROM [UserAssessment] AS [ua] 
LEFT JOIN [Review] AS [r] ON [ua].[ReviewId] = [r].[Id] 
LEFT JOIN [Review] AS [r1] ON [ua].[ReviewId] = [r1].[Id] 

任何人都知道我能做些什么?

UPDATE

此语句生成查询:

return this.DbSet 
.Include(ua => ua.Employee).ThenInclude(t => t.Role) 
.Include(ua => ua.Review).ThenInclude(rt => rt.ReviewType) 
.Include(ua => ua.Review).ThenInclude(rt => rt.Manager).ThenInclude(r => r.Role) 

我有那些相同的includes访问,因为延迟加载不适用于EF7呢。

+4

显示导致它的错误消息和命令。在你的最后,你也可以检查生成的SQL,看看它显示了什么。 –

+0

什么代码生成该语句?你使用Code-First?你有没有尝试用你的模型创建新的数据库? – Edin

+0

@Edin,我用生成查询的语句更新了问题。我使用的是代码优先,我还没有尝试再次生成数据库,因为我没有更改或添加任何字段和表已经在系统的其他部分使用了,所以我可以做一个这样的剧烈修改。 – BernardoMorais

回答

0

您需要在员工和审查

public class Review 
{ 
    public int Id { get; set; } 

    [Required] 
    [InverseProperty("Reviews")] 
    public Employee Employee { get; set; } 

    [Required] 
    public Employee Manager { get; set; } 
} 

public class Employee 
    { 
     public int Id { get; set; } 

     [InverseProperty("Employee")] 
     public ICollection<Review> Reviews { get; set; } 
    } 

都应该工作InverseProperty。我有一个类似的设置,它创建导航而不创建任何新字段。如果这不起作用,请告诉我,我会启动一个测试项目。

另请注意,EF7目前忽略虚拟,这并不像EF6中那样有意义。