2012-08-27 194 views
1

延遲加載時使用實體框架 - 當實體 爲空時,在加載相關實體時遇到以下問題。實體框架延遲加載子屬性中的空屬性

假設我有兩張僱員和employeedetails表。假設在上述情況下,並非所有員工條目都在employeedetails表中有條目。 如果我想查員工名單

(from e in objectcontext.employees         
           select new EmployeeEntity 
           { 
            EmpID= e.EmployeeID, 
            FirstName = e.FirstName, 
            Address = e.employeedetails.Address 
           }).ToList(); 

EmployeeEntity是爲我們的東西結果的數據類。

即使返回列表 中的一位員工在表employeedetails中沒有條目,上述代碼也會中斷。 這是顯而易見的,因爲e.employeedetails將爲空的那些客戶誰沒有一個細節條目

重寫上述查詢的最佳方法是什麼?

會這樣嗎?

(from e in objectcontext.employees         
           select new EmployeeEntity 
           { 
            EmpID= e.EmployeeID, 
            FirstName = e.FirstName, 
    Address = e.employeedetails == null ? "" : e.employeedetails.Address, 
           }).ToList(); 

我不清楚上述查詢的效率 - 此數據庫是否會在數據庫級執行空檢查?

我應該做的,而不是一個明確的包括像

objectcontext.include("employeedetails")... 

然後遍歷結果檢查null?

+0

您是否真的在運行時遇到空引用異常?在類似的查詢中(對可空引用對象選擇),我看到EF產生外連接和引用屬性(在你的情況下爲'Address')爲'null'。 –

+0

是的。我在運行時遇到了空引用 - 除了它們可能不在字符串字段中。在實際的代碼中,我從引用對象中檢索了很多屬性。我認爲null break可能在DateTime字段上。 – user275157

回答

1

是的,該語句確實會在生成的SQL查詢中執行空檢查。很可能,它只是一個NVLCOALESCE

這就是你應該這樣做的方式。