2012-06-22 25 views
2

我有一個在Web解決方案中使用的兒童關係的經典父集。NHibernate:維護與集合的外鍵關係,同時最大限度地減少數據傳輸

我希望能夠堅持獨立的孩子,但我也想避免多餘。似乎每個人都認爲孩子應該被定義如下:

public class Child { 
    public virtual int Id {get; set;} 
    public virtual string Name {get; set;} 
    public virtual Parent {get; set;} 
} 

就這樣,我可以保證孩子有其父的引用。

問題是,當從應用程序中拉取這些Child對象時,我不想要父集的副本與集合中的每個子集一起加載。

知道我使用JSON.net進行序列化可能很有用。

同樣,我的目標是能夠單獨堅持孩子,但不必存儲整個Parent對象。

回答

0

最好的方法就是使用DTO/view模型。使用映射器從您的實體轉移到這個輕量級課程,然後返回較輕的課程。我抵制這種方法一段時間,堅持認爲創建DTO /視圖模型類只是我的努力的兩倍,但最終這是最有可能在後面咬你的最有生產力的方法。這就是說,你可以裝飾ParentJsonIgnoreAttribute,但A),混淆演示文稿或可能商業問題與你的域名和B)它只是擺脫不可避免的。

+0

我會接受這個解決方案。不幸的是JsonIgnoreAttribute不會在這裏削減它。我前幾天想到了這個,但是試圖繞過它。如果這是人們爲了解決問題而做的事情,我只需要咬緊牙關。 – user321605

0

如果你在1個會話中加載子對象,NHibernate將只在數據庫中創建每個唯一父對象的1個實例 - 即使父對象是你加載的其中一個子對象,它也不會去並重新加載或創建一個新的對象。這基本上就是NHibernate所維護的「對象標識」 - 在一個會話中,NHibernate只會爲一行創建一個實體實例(有一些例外情況你可以做到,否則通常這會保持不變)。

+0

我並不擔心花在查詢數據庫上的時間。對我來說問題是,當我去序列化時,JSON.NET會複製這些數據,爲每個孩子寫出它。 – user321605

+0

然後這個問題並沒有真正與NHibernate相關,而是如何讓JSON.NET來維護對象引用(請參閱http://johnnycode.com/2012/04/10/serializing-circular-references-with-json -net-and-entity-framework /)或告訴JSON.NET忽略Parent屬性 –

相關問題