簡體   English   中英

InverseProperty實體框架7

[英]InverseProperty Entity Framework 7

我面臨EF7逆屬性的問題。 有兩個這樣連接的實體。

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]

有人知道我該怎么辦?

更新

該語句生成查詢:

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上尚無法進行延遲加載。

您需要在Employee和Review上都具有InverseProperty

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; }
    }

應該管用。 我有一個類似的設置,它在不創建任何新字段的情況下創建導航。 如果這不起作用,請告訴我,然后我將啟動一個測試項目。

還要注意,EF7當前忽略虛擬 ,並且沒有像EF6那樣的含義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM