質問

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

現在、製品のマッピングには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に追加する必要がありますか?

役に立ちましたか?

解決

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

histories = new HashedSet();

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

他のヒント

どうしてですか?

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

もちろん、プライベートを持っているという問題が発生した場合は、コンストラクターに入れることもできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top