2016-05-17 153 views
0

我遇到了一個問題:我有一個表引用了另一個表,它有一個引用另一個表的引用列表,它有另一個引用列表,而我想要加載所有這一切。實體框架急切加載實體列表內的實體列表

基本上,這個想法是:

public class User { 
    public ClassL1 l1 { get; set; } 
} 

ClassL1 { 
    public List<ClassL2> l2 { get; set; } 
} 

ClassL2 { 
    public List<ClassL3> l3 { get; set; } 
} 

ClassL3 { 
    //some basic string or int values 
} 

而目前,我試圖用這樣的加載它,但無濟於事:

user = context.Users 
    .Where(u => u.UserName == model.Username) 
    .Include(u => u.l1) 
    .ThenInclude(l1 => l1.l2) 
    .ThenInclude(l2List => l2List.Select(l2Single => l2Single.l3))//This doesn't work 
    //.Include(u => u.l1.l2.Select(l2Single => l2Single.l3)) //Neither does this 
    .First(); 

我怎麼加載列表的列表,如果選擇不工作?任何幫助,將不勝感激。

編輯: 好,因爲顯然是在這個開放的錯誤,我去一個愚蠢的修復,並使其像這樣的工作:

user = context.Users 
    .Where(u => u.UserName == model.Username) 
    .Include(u => u.l1) 
    .ThenInclude(l1 => l1.l2) 
    .First(); 
for (int i = 0; i < user.l1.l2.Count; i++) 
{ 
    user.l1.l2[i].l3 = context.l3DB 
    .Where(p => p.l2.Id == user.l1.l2[i].Id) 
    .ToList(); 
} 

而且這個工作,我添加引用了(給家長)。 例如:

public class ClassL2 { 
    public List<ClassL3> l3 { get; set; } 
    public ClassL1 l1 { get; set; }//reference to parent 
} 

回答

1

如何:自

user = (from usr in context.Users 
     where usr.UserName == model.Username 
     select new 
     { 
      usr, 
      usr.l1, 
      l2List = from l2 in usr.l1.l2 
        select new 
        { 
         l2, 
         l2.l3 
        } 
     }).AsEnumerable().Select(m => m.usr).First(); 
+0

似乎不起作用。我收到一個錯誤: 「在'Microsoft.Data.Entity.Query.Internal.EntityQueryable'1 [ClassL3]'和'System.Collections.Generic.List'1 [ClassL3]'類型之間沒有定義強制操作符。」 –

+0

也許這是你映射的問題。你使用哪個版本的EF? –

+0

「EntityFramework.Commands」:「7.0.0-rc1-final」 「EntityFramework.Core」:「7.0.0-rc1-final」 我也這麼認爲,但我找不到解決方法,有一個名字與它的名字相同,改變了這一點,但錯誤仍然存​​在。如果這有什麼幫助的話,我可以上傳關於這個問題的代碼片段。 –

0

檢查:

user = context.Users 
    .Where(u => u.UserName == model.Username) 
    .Include(u => u.l1) 
    .ThenInclude(l1 => l1.l2) 
    .ThenInclude(l2 => l2.l3) 
    .First(); 
+0

這是不行的,L2是一個列表,我不能從那裏訪問的特性,它不是一個單一的元素。這就是我的問題所在,如果它的工作很容易,我不會有問題,但現在我必須先選擇。 –