3

我有一个名为Product的表,我有一个表StorageHistory

现在, Product 在其映射中包含对 StorageHistory 的引用

<set name="StorageHistories" lazy="false">
  <key column="ProductId" />
  <one-to-many class="StorageHistory" />
</set>

它有效,当我从 ORM 中检索一个对象时,我得到一个空的 ISet。

让我头疼的是如何首先构造对象。当我执行以下操作时:

var product = new Product();
session.Save(product);

product.StorageHistory 属性为 NULL,我得到 NullReferenceException。那么,如何将项目添加到该集合中,或者我应该如何将 StorageHistory 项目本身添加到数据库中?

4

2 回答 2

6

我总是在父对象的 ctor 中执行以下操作:

历史 = 新的 HashedSet();

这涵盖了 Save() 用例。如您所述,NHibernate 涵盖了 Load()/Get() 等用例。

于 2008-11-03T10:03:06.387 回答
0

为什么不?

private ISet _StorageHistories;
public virtual ISet StorageHistories {
     protected set { _StorageHistories = value;}
     get { if (_StorageHistories == null) _StorageHistories = new HashSet();
           return _StorageHistories;
     }
}

当然,如果您无论如何都遇到了私有的麻烦,那么您不妨将它放在构造函数中。

于 2008-11-06T18:50:38.270 回答