Creazione di un oggetto NHibernate e inizializzazione di un set
-
06-07-2019 - |
Domanda
Ho una tabella chiamata Prodotto e ho la tabella StorageHistory .
Ora, il prodotto contiene un riferimento a StorageHistory nelle sue mappature
<set name="StorageHistories" lazy="false">
<key column="ProductId" />
<one-to-many class="StorageHistory" />
</set>
E funziona, quando recupero un oggetto dall'ORM ottengo un ISet vuoto.
Ciò che mi dà mal di testa è come costruire l'oggetto in primo luogo. Quando faccio quanto segue:
var product = new Product();
session.Save(product);
la proprietà product.StorageHistories è NULL e ottengo una NullReferenceException. Quindi, come faccio ad aggiungere elementi a quella raccolta o devo fare in modo di aggiungere gli stessi oggetti StorageHistory al DB?
Soluzione
Nel ctor dell'oggetto genitore faccio sempre quanto segue:
histories = new HashedSet ();
Questo riguarda il caso d'uso Save (). Il caso d'uso Load () / Get () ecc. È coperto da NHibernate come indicato.
Altri suggerimenti
Perché no?
private ISet _StorageHistories;
public virtual ISet StorageHistories {
protected set { _StorageHistories = value;}
get { if (_StorageHistories == null) _StorageHistories = new HashSet();
return _StorageHistories;
}
}
Ovviamente se hai comunque il problema di avere un privato potresti metterlo nel costruttore.