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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top