我想弄清楚一些方法來使我的一些數據庫對象可序列化到和從XML文件。維護與序列化的對象關係映射
我正在爲我的對象使用實體框架數據模型,並使它們可供我的客戶端使用WCF RIA Services。我希望能夠從數據庫中獲取給定的對象並將其序列化爲XML文件,反之亦然。
在過去,我已經嘗試這樣做,是我遇到的問題如下:
如果我執行IXmlSerializable的每個對象,然後在反序列化時每個對象一無所知的其他對象被反序列化。它處於一種氣泡之中,無法將外鍵ID解析爲對象引用。
對於上述問題,我發現的唯一解決方案是編寫一個大的序列化和反序列化方法,其中父對象跟蹤引用並根據需要分配它們。這樣做感覺像是一種非常糟糕的方式,因爲我必須在對象發生變化時不斷維護這種大型方法,而不是每個對象都負責自己的序列化。
嵌套對象的標準XML設計彼此不適用於ORM模型。原因是一些對象可能有多個其他對象的引用並被其使用,所以我不能將這些對象創建爲父對象的子元素。
考慮下面的XML:
<User Name="John Smith">
<FavoriteMovies>
<Movie Name="The Big Lebowski" Year="1998" ... />
</FavoriteMovies>
</User>
<User Name="Robert Jones">
<FavoriteMovies>
<Movie Name="The Big Lebowski" Year="1998" ... />
</FavoriteMovies>
</User>
顯然我不應該同一部電影的兩個實例。而是序列化應該是這個樣子:
<User Name="John Smith">
<FavoriteMovies>
<Id>5</Id>
</FavoriteMovies>
</User>
<User Name="Robert Jones">
<FavoriteMovies>
<Id>5</Id>
</FavoriteMovies>
</User>
<Movies>
<Movie Id="5" Name="The Big Lebowski" Year="1998" ... />
</Movies>
WCF已經知道如何序列化和反序列化我的對象爲SOAP/JSON的/ etc。使用數據服務。這是我可以在序列化到XML文件時重用的東西嗎?
對我來說,依靠數據庫外鍵ID可能不會工作,因爲在很多情況下對象將具有默認ID。 WCF設法對這些對象進行序列化,而不必依賴這些對象,並且只有在保存到SQL數據庫後纔會分配這些ID。
看起來很有希望,儘管它看起來非常冗長,它序列化有關我的EntityFramework模型容器的信息。 –