Création d'un objet NHibernate et initialisation d'un ensemble
-
06-07-2019 - |
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?
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.