我有一个名为 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.StorageHistories属性为NULL,我得到一个NullReferenceException。 那么,如何向该集合中添加项目,或者我应该将自己的StorageHistory项目添加到数据库中呢?
答案 0 :(得分:6)
我总是在父对象的ctor中执行以下操作:
histories = new HashedSet();
这包括Save()用例。正如你所说,NHibernate涵盖了Load()/ Get()等用例。
答案 1 :(得分:0)
为什么不呢?
private ISet _StorageHistories;
public virtual ISet StorageHistories {
protected set { _StorageHistories = value;}
get { if (_StorageHistories == null) _StorageHistories = new HashSet();
return _StorageHistories;
}
}
当然,如果你经历过私有的麻烦,你也可以把它放在构造函数中。