2017-08-24 64 views
1

With EF 6,我是這樣查詢的,它工作的很好。EF Core包含多個級別的問題

IQueryable<Student> query = _testHelper.buildQuerty(id, userId) 
     .Include(x => x.Class) 
     .Include(x => x.Subjects) 
     .Include(x => x.Subjects.Select(y => y.Category)); 

問題: 同樣不EF核2.0工作。

錯誤

System.ArgumentException發生的HResult = 80070057消息=該 屬性表達 '受試者=> {從受試者的Y受試者選擇 [Y] .Category}' 是無效的。表達式應代表屬性 訪問:'t => t.MyProperty'。有關包含 相關數據的更多信息,請參見http://go.microsoft.com/fwlink/?LinkID=746393

打開鏈接,並重構像這樣,但它仍然不工作,並給出相同的錯誤。

List<Student> query = _testHelper.buildQuerty(id, userId) 
     .Include(x => x.Class) 
     .Include(x => x.Subjects) 
     .ThenInclude(Subjects => Subjects.Select(y => y.Category)).tolist(); 

問題在哪裏?

回答

6

您錯誤地使用了最後一條鏈ThenInclude。你應該像下面的代碼一樣使用它。

List<Student> query = _testHelper.buildQuerty(id, userId) 
     .Include(x => x.Class) 
     .Include(x => x.Subjects) 
     .ThenInclude(subject => subject.Category); 

有了這個ThenInclude擴展方法,你在處理最後一次使用包括其處理該類型的集合,因爲與Subject一個實例。

+1

謝謝,我知道這種方式,但懶得測試。你知道奇怪的事情是,當你在主題後面寫點時,類別不會顯示出來,而是顯示所有與收藏相關的東西。這就是爲什麼我以其他方式工作的方式。無論如何,謝謝。 – simbada

+2

@simbada我在做'ThenInclude'的同時,也在Visual Studio上嘗試了錯誤的intellisense行爲。 –

+3

這是因爲兩個重載都是表達式,而智能感知不知道選擇哪一個,並始終選擇實體上的集合(以前選擇的導航屬性) – Tseng