2

我有一个经典的父子关系集合,用于 Web 解决方案。

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

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

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

问题是,当从应用程序中提取这些子对象时,我不希望将父对象的副本与集合中的每个子对象一起加载。

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

同样,我的目标是能够单独持久化子对象,但不必将整个 Parent 对象存储在其中。

4

2 回答 2

0

最好的方法就是使用 DTO/视图模型。使用映射器从您的实体转移到这个更轻的类,并返回更轻的类。我有一段时间反对这种方法,坚持认为创建 DTO/视图模型类只是加倍努力,但归根结底,这是最有成效的方法,以后不太可能在后面咬你。

话虽这么说,您可以用 来装饰ParentJsonIgnoreAttribute但是 A)混淆了您的域的演示或业务问题,B)它只是消除了不可避免的问题。

于 2012-06-22T01:24:24.870 回答
0

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

于 2012-06-22T09:48:40.267 回答