我已經構建了一個非常extenxive EF查詢,結果是錯誤的。在哪裏和爲什麼似乎無法追查,因爲我的內隱感覺只是返回null。我希望有人能夠指引我正確的方向。我用this open on my second monitor.EF包含查詢結果有問題,內部異常爲空
var databaseRequirementVersions = context.RequirementVersions
.Include(x => x.Requirement)
.Include(x => x.RequirementDetails)
.Include(x => x.TaggedValueRequirementCouplers)
.Include(x => x.TaggedValueRequirementCouplers.Select(y => y.TaggedValueVersion))
.Include(x => x.TaggedValueRequirementCouplers.Select(y => y.TaggedValueVersion.TaggedValue))
.Include(x => x.ConnectorRequirementCouplers)
.Include(x => x.ConnectorRequirementCouplers.Select(y => y.ConnectorVersion))
.Include(x => x.ConnectorRequirementCouplers.Select(y => y.ConnectorVersion.Connector))
.Include(x => x.ConnectorRequirementCouplers.Select(y => y.ConnectorVersion.ConnectorDetails))
.Include(x => x.ConnectorRequirementCouplers.Select(y => y.ConnectorVersion.TaggedValueConnectorCouplers))
.Include(x => x.ConnectorRequirementCouplers.Select(y => y.ConnectorVersion.TaggedValueConnectorCouplers.Select(a => a.TaggedValueVersion)))
.Include(x => x.ConnectorRequirementCouplers.Select(y => y.ConnectorVersion.TaggedValueConnectorCouplers.Select(a => a.TaggedValueVersion.TaggedValue)))
.Where(x => x.Requirement.Guid == element.ElementGUID);
快速破壞了數據庫;
RequirementVersions總是具有1項要求(要求可以有多個版本)
RequirementVersions總是具有1個RequirementDetails
RequirementVersions具有多個TaggedValueRequirementCouplers(耦合器表)
RequirementTaggedValueVersion具有多個TaggedValueRequirementCouplers(耦合器表)
RequirementTaggedValueVersion總是具有1個RequirementTaggedValue (RequirementTaggedValue可以有多個版本)
RequirementVersions有多個ConnectorRequirementCouplers(耦合器表)
Connecto rVersion具有多個ConnectorRequirementCouplers(耦合器表)
ConnectorVersion總是具有1連接器(連接器可以具有多個版本)
ConnectorVersion總是具有1個ConnectorDetails
ConnectorVersion具有多個ConnectorTaggedValueCouplers(耦合器表)
ConnectorTaggedValueVersion具有多個ConnectorTaggedValueCouplers(聯接器的表)
ConnectorTaggedValueVersion具有1個ConnectorTaggedValue(ConnectorTaggedValue可以有多個ConnectorTaggedValueVersions)
例外: 堆棧跟蹤從MoreLinq MaxBy<>
開始,它位於包含語句下方,它嘗試發出以下代碼行;
var MyList = new List<RequirementVersion>();
MyList.Add(databaseRequirementVersions?.MaxBy(x => x.Version));
我已經做了什麼來得出結論我的.Include
是壞的;
當我註釋掉(//
)所有.Include
的比第2層(所以任何打算過去y.
- 這意味着y.ConnectorVersion
的作品,但y.ConnectorVersion.Connector
,或(假設)y.ConnectorVersion.Select(z => z.Connector)
不工作)不斷深入查詢被接受。
正如我似乎無法通過自己與可用的工具來算出這個一出來,我希望有人能指出我在正確的方向..
編輯: @Evk要我改變MaxBy<>
-statement以確保它不會導致問題本身,所以這裏是新的(相同的?)異常;
什麼爛攤子。完成惡夢維護和調試。 –
從簡單檢查開始:啓用數據庫日誌(context.Database.Log = Console.WriteLine或其他)。去掉 」?」這裏>「databaseRequirementVersions?」。用FirstOrDefault()替換MaxBy。 – Evk
另請檢查InnerException。這是什麼意思 –