2009-11-05 52 views
1

對象圖「[類型]」包含週期,並且如果參考跟蹤被禁止不能被序列化。NHibernate和WCF序列化(單向)類型

我使用NHibernate作爲我的持久層的簡單類層次結構設置。

例如:

public class Parent 
{ 
    public virtual IList<Child> Children{get;set;} 
} 

public class Child 
{ 
    public virtual Parent Parent{get;set;} 
} 

這僅僅是做一個有關孩子的單親家庭,並且通過數據庫中的外鍵被持久化。 NHibernate的部分和持久性工作得很好。通過WCF Web服務公開此關係時發生此問題。我意識到這裏有一個循環引用,並且已經閱讀了LINQ to SQL允許單向序列化的一些解決方案,但是當不使用dbml文件時無法找到解決方案。


UPDATE

另外一個問題是,它是常見的做法,以抽象的一組DTO的通過Web服務公開,而不是原來的實體?這樣就解決了系列化的問題,因爲DTO類不一定需要循環引用(因爲它們不是NHibernate的實體)。


其他更新

我碰到一個article,可能是在正確的方向。我現在正在測試這個,如果成功的話會發布(對於文章價值的緣故)。

回答

3

這是爲了保護您的域名,而不是讓它跨進程邊界去的最佳實踐。我會推薦一個DTO實現來抽象你的域。還有其他好處,包括可以提供一個意圖揭示接口(客戶不應該思考如何使用該服務)。

+1

實際上,我已經花了一整天的時間習慣了AutoMapper和一些較輕的DTO通過線路發送,而不是域實體。 – 2009-11-07 06:09:09