背景是我剛剛開始使用EntityFramework的團隊;首先我們設計了數據庫,把所有的表格關係放到位,外鍵等等。然後通過visual studio添加一個新的ADO.NET實體數據模型,並且自動奇蹟般地獲得代表整個數據庫的生成的edmx文件!ADO.NET實體框架 - 如何僅從一個表中選擇數據(並忽略其他表)?
現在我專注於爲所有下拉列表和查找列表提供數據的兩個表格;
TLookupDomain (domainID, domainName, domainDesc)
TLookup (lookupID, domainID, lookupCode, lookupDisplay, lookupDesc, sortOrder)
關係是由左到右1-M會:
TLookupDomain - < TLookup - < TOther(+另外30個左右的其他表)
所以lookupId所是一家外商關鍵多達30桌;
IQueryable<TLookup> qList = from l in ctx.TLookups
where l.domainID == 24
select l;
foreach (TLookup l in qList)
{
//do something.
System.Diagnostics.Debug.WriteLine("{0}\t{1}", l.lookupCode, l.lookupDisplay);
foreach (TOther f in l.TOthers)
{
System.Diagnostics.Debug.WriteLine("{0}\t{1}", f.feeAmount, f.feeDesc);
}
}
當我執行上面的LINQ,我得到TLookup表中的所有字段(這是公平的),但數據也獲取了鏈接到它的30頁左右的表,即使我不此時對其他表格的數據感興趣,並且我將在LINQ獲取數據時立即丟棄所有數據。
兩個問題,我有: 問題1)我可以以某種方式修改LINQ查詢以上或以其他方式告知的EntityFramework不會從其他30個鏈接表煩fetchin數據?問題2)是否有一個模型化整個數據庫的edmx文件是「正確的」? (聽起來狡猾)。
非常簡潔但可能是第一個正確的答案,所以我會去那。正如Ladislav Mrnka所說,懶加載默認情況下已經啓用,所以它的合理性是我得到其他數據,因爲我在第二個foreach迭代器中導航; (當我得到時間我會做一些測試,看看實際發送到SqlServer,它是否得到任何SQL查詢導航!) – joedotnot 2011-03-15 23:30:30
+1爲好答案:) – 2012-04-14 04:41:35