2016-03-01 113 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中那樣有意義。