3

Productというテーブルがあり、TableStorageHistoryがあります。

現在、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アイテム自体をDBに追加する方法をとる必要がありますか?

4

2 に答える 2

6

親オブジェクトのctorで常に次のことを行います。

履歴 = 新しい HashedSet();

これは Save() ユースケースをカバーしています。あなたが述べたように、Load()/Get() などのユースケースは NHibernate でカバーされています。

于 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 に答える