2011-11-25 66 views
1

我在WPF應用程序的工作後設置爲null,建築師是實體對象的導航屬性反序列化

WPF-> WCF-> DAL

的問題是,當我調用WCF方法,它返回物體。 WCF級別的所有東西都可以正常工作,但在返回對象時,在WCF之後,我的導航屬性設置爲null。

我正在返回Department類的對象(PO​​CO)對象,其導航屬性爲Employees。我已經驗證了[DataMember]屬性,事實並非如此。但是一旦它到達MainUI,其Employees屬性就設置爲null。

我的導航屬性的代碼看起來像

感謝

+1

你可以把代碼查詢 –

+0

它是WCF服務代碼?你爲什麼使用'ToFixupCollection'而不是在單個查詢中包含所有的細節?是員工映射關係嗎?你能顯示你的實體代碼嗎?你是如何創建WCF客戶端的?順便說一句。你可以檢查傳輸的消息來驗證WCF服務是否發送數據(使用[消息記錄](http://msdn.microsoft.com/en-us/library/ms730064.aspx))? –

+1

也不要調用'department.FirstOrDefault()'兩次。它執行兩次數據庫查詢。你只需要調用一次並使用結果。 –

回答

3

我想這是因爲導航性能都懶加載。當你嘗試訪問它們時,它們不能被加載,因爲上下文被丟棄。您應該在加載主屬性時急切或顯式加載它們。

預先加載:

from d in context.Department.Include("Employees") 
select d; 

顯式加載:

department.FirstOrDefault().Employees = employees.ToFixupCollection(); 

var departments = (from d in context.Department 
        select d).ToList(); 
departments.ForEach(e => e.EmployeesReference.Load()); 

編輯問題編輯

的問題可能是行之後

嘗試將其更改爲:

department.FirstOrDefault().Employees = employees.ToList<Employee>(); 
+0

不好意思,我檢查過了,重新檢查一下,但沒用, –

+0

@MSingh你能發表你的代碼嗎?這將有很大幫助。注意:如果您在調試模式下檢查導航屬性,它將顯式加載屬性。 – Mentoliptus

+0

感謝您的關注,我在查詢中添加了一些代碼,請確認。謝謝 –