0

我有一個簡單的數據庫與兩個表employeeemployeedetailsLinq返回外鍵引用數據

employee有外鍵empdetailsid指向表employeedetails

我簡單的LINQ查詢返回的員工

var employeeList = from employee in objectcontext.employees select employee; 
return employeeList.ToList(); 

也返回employeedetails和我並不需要所有它包含的字段。 我正在使用實體框架4.0。有沒有辦法避免獲取所有不必要的數據。 我可以去定義一個模型類,只有僱員表字段,可以加載到,但我想知道是否有一個更簡單的方法。我正在使用一個MySQL數據庫。

+0

通常EF4確實做延遲加載,除非文中已經有選項設置爲改變行爲。查看與objectcontext關聯的所有代碼。 。 。我猜你已經關閉了延遲加載。 – Frank 2011-01-22 17:14:08

回答

2

您如何知道查詢返回員工詳細信息?您是否檢查過生成的SQL查詢,或者您是否嘗試訪問EmployeeDetails對象並獲取數據。在第二種情況下,EF可能確實只是懶惰地加載數據(當您嘗試訪問它時)。否則,如果您確定這些額外的數據獲取初始查詢的執行過程中獲取的,儘量含蓄地讓懶加載運行查詢之前:

objectcontext.ContextOptions.LazyLoadingEnabled = true; 
+0

我想這是惰性加載,我毫無必要地恐慌:)。無論如何,請將lazyloadingenabled設置爲true。謝謝。 – user275157 2011-01-25 12:46:17

1

我還沒有使用EF 4,但大多數ORM傾向於使用一種稱爲延遲加載的概念。只有在對該對象進行調用時纔會檢索相關員工詳細信息中的數據。當您查看調試器中的對象時,單擊對象時將檢索特定員工詳細信息的數據。爲了更好地瞭解正在檢索的數據,您需要針對數據庫運行一個分析器來捕獲正在進行的SQL查詢。我不知道如果MySQL有一個內置的分析器像SQL服務器。如果不檢查nhprof。