2013-02-20 73 views
5

好的,所以根據this page,實體框架應該通過在Include方法中使用Select來加載多個級別。實體框架急切加載多級異常

我有以下代碼:

var reports = _context.Reports 
    .Include(rt => rt.Fields) 
    .Include(rt => rt.Fields.Select(f => f.FieldType)) 
    .Include(rt => rt.Fields.Select(f => f.FieldType.FieldIdentifier)); 

然而,這將引發InvalidOperationException - 「無效型表達的」關於該呼叫到第二包含。異常來自EntityFrameworkHelper.CollectRelationalMemebers

我也嘗試使用字符串Include相關的屬性,但也失敗了(我寧願避免使用字符串,如果可能的話)。

我爲.NET 4.0使用EF 5.0 DLL。我的EF課程是老式的數據庫第一EntityObject s。

有誰知道原因,如果有什麼我可以做這個異常?

編輯:

當使用字符串版本:

var reports = _context.Reports 
    .Include("Fields") 
    .Include("Fields.FieldType") 
    .Include("Fields.FieldType.FieldIdentifier")); 

它拋出InvalidOperationException - 無效類型的表達式。

+0

當您使用基於字符串的Include版本時,確切的異常信息是什麼? – Slauma 2013-02-20 20:00:40

+0

見上面的答案。 – MgSam 2013-02-20 20:20:18

+0

我的意思是基於**字符串的** Include版本的例外情況。 – Slauma 2013-02-20 20:39:04

回答

0

問題結束了,在一個DLL,我們不得不使用第三方Include擴展方法是獲得優先於實體框架的Include。第三方正在拋出異常。刪除後,問題就解決了。

擴展方法的問題之一...

感謝大家的幫助。

19

你有冗餘包括。你只需要最後的包含,這將包括在該路徑中的任何東西。例如:

var reports = _context.Reports 
    .Include(rt => rt.Fields.Select(f => f.FieldType.FieldIdentifier)); 
相關問題