編輯:根據測試更新問題說明 - 09月12日2011年EF4.1多重嵌套實體包括獲取NotSupportedException?
我有這樣的查詢引發NotSupportedException每當我打電話.ToList()(「不支持指定的方法。」)。
IQueryable<FileDefinition> query = db
.FileDefinitions
.Include(x => x.DefinitionChangeLogs)
.Include(x => x.FieldDefinitions.Select(y => y.DefinitionChangeLogs)) // bad
.Include(x => x.FieldDefinitions.Select(y => y.FieldValidationTables)) // bad
.Where(x => x.IsActive);
List<FileDefinition> retval = query.ToList();
如果我註釋掉任何一條我已評論爲「不好」的行,那麼查詢就起作用。我也嘗試在我的對象模型中包含不同的嵌套實體,效果相同。包括任何2將導致崩潰。嵌套,我的意思是導航屬性的導航屬性。我也嘗試使用.include方法與字符串路徑:相同的結果。
我的表結構是這樣的:
這是使用MySQL 5.1(InnoDB表明顯)與MySQL連接/ NET 6.3.4數據庫存儲。
所以我的問題是:爲什麼不工作?
注意:如果我明確加載像this link這樣的相關實體,我可以得到它的工作。但我想知道爲什麼EF討厭我的數據模型。
回答:MySQL Connector顯然不能處理第二個嵌套實體include。它引發NotSupportedException,而不是.NET EF。當我嘗試使用EF4.0時,也出現了同樣的錯誤,但是當時我的研究讓我相信這是導致問題的自我跟蹤實體。我嘗試升級到最新的連接器,但它開始導致Out of Sync error。對我來說這是yet another reason討厭MySQL。
如果僅*離開包含標記爲「壞」的'Include'並刪除另外兩個包含?那它有用嗎? – Slauma
@Slauma是的,第二行自行工作。我做了更多的測試,並且它似乎是導致崩潰的第二個和第三個包含的組合。他們自己工作,但不在一起。 FieldValidationTables集合從數據庫的視圖中加載,我必須在EF模型中手動設置關係。它具有FieldDefinitionId和TableName字段。 FieldDefintion 1 <-> * FieldValidationTable –
我不知道這個問題是什麼。您可能需要在您的問題中添加更多詳細信息才能獲得答案(主要是爲了讓簡單示例模型中的其他人可以重現問題)。 – Slauma