2011-02-15 102 views
3

我想序列化和EF 4.0對象圖形到XML通過WCF服務傳遞。在過去,我通過DTO的/ POCO(通常用於JSON序列化)完成了這項工作。自從我只是做XML序列化這種情況下,它似乎是我應該只能夠序列化實體而是直接對象,我遇到了這個難題:XML序列化實體對象

  1. 如果我不脫離實體化,系列化拋出一個對象上下文已經被處理的錯誤(因爲它在那個點上,所以這是預期的)。

  2. 如果我分離實體,則會刪除導航屬性中加載的任何相關對象。

我的期望是,如果我列舉的任何鏈接的實體,然後分離從上下文對象我仍然有可序列化這種關係。

所以我的問題,有無論如何直接序列化一個實體對象,並保留任何加載導航屬性/集合?

謝謝...

+0

您確定導航屬性已加載嗎?第一個問題看起來像EF觸發器懶加載得到它們。 – 2011-02-15 23:47:35

回答

1

當序列化對象,序列化會遍歷整個對象圖。

  • 如果您的對象已連接,它將強制加載每個延遲加載的導航。因此,如果你的上下文被處置,你會得到一個異常。
  • 根據msdn,當導航屬性中的項目被分離時,它不會再出現在導航屬性中。我認爲當分離一個對象並訪問它的導航屬性時是一樣的。

我想你應該在序列化之前從你的實體對象製作DTO/POCO。但是,您應該看看automapper這將幫助您將對象從實體轉換爲DTO並返回。