Question

J'ai une table appelée Produit et la table StorageHistory .

Le produit contient maintenant une référence à StorageHistory dans ses mappages

<set name="StorageHistories" lazy="false">
  <key column="ProductId" />
  <one-to-many class="StorageHistory" />
</set>

Et ça marche, quand je récupère un objet de l'ORM, je reçois un ISet vide.

Ce qui me donne le mal à la tête, c'est comment construire l'objet en premier lieu. Quand je fais ce qui suit:

var product = new Product();
session.Save(product);

la propriété product.StorageHistories est NULL et j'obtiens une exception NullReferenceException. Alors, comment puis-je ajouter des éléments à cette collection ou dois-je choisir d'ajouter les éléments StorageHistory eux-mêmes à la base de données?

Était-ce utile?

La solution

Je fais toujours ce qui suit dans le ctor de l'objet parent:

historiques = new HashedSet ();

Ceci couvre le cas d'utilisation Save (). Le cas d'utilisation Load () / Get () etc. est couvert par NHibernate comme vous l'avez indiqué.

Autres conseils

Pourquoi pas?

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

Bien sûr, si vous rencontrez le problème d'avoir un privé, vous pouvez tout aussi bien le mettre dans le constructeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top