NHibernate:与集合保持外键关系,同时最大限度地减少数据传输

时间:2012-06-22 01:14:24

标签: nhibernate asp.net-web-api

我有一个经典的子集合子集合,正在Web解决方案中使用。

我希望能够单独坚持孩子,但我也想避免多余。似乎每个人都说孩子的定义如下:

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

有了这个,我可以确保孩子有一个对其父母的引用。

问题是,当从应用程序中提取这些Child对象时,我不希望在集合中为每个子项加载Parent的副本。

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

同样,我的目标是能够单独保留孩子,但不必将整个Parent对象存储在里面。

2 个答案:

答案 0 :(得分:0)

最好的方法是使用DTO /视图模型。使用映射器从您的实体转移到这个较轻的类,并返回较轻的类。我暂时拒绝这种方法,坚持认为创建DTO /视图模型类只是使我的努力倍增,但最终这是最有效的方法,最不可能在后面咬你。

话虽这么说,你可以用Parent来装饰JsonIgnoreAttribute,但是A)会使你的域名出现问题或者商业问题,并且B)它只是在不可避免地解决问题。

答案 1 :(得分:0)

如果您在1个会话中加载子项,NHibernate将只在数据库中创建每个唯一父项的1个实例 - 即使父项是您已加载的子项之一,它也不会再次加载它或创建一个新对象。这基本上是NHibernate维护的“对象标识” - 在一个会话中,NHibernate只会为一行创建一个实体实例(有一些例外,你可以做到这一点,但通常这将成立)。