Crear un objeto NHibernate e inicializar un conjunto
-
06-07-2019 - |
Pregunta
Tengo una tabla llamada Producto y tengo la tabla StorageHistory .
Ahora, el Producto contiene una referencia a StorageHistory en sus asignaciones
<set name="StorageHistories" lazy="false">
<key column="ProductId" />
<one-to-many class="StorageHistory" />
</set>
Y funciona, cuando recupero un objeto del ORM obtengo un ISet vacío.
Lo que me da dolor de cabeza es cómo construir el objeto en primer lugar. Cuando hago lo siguiente:
var product = new Product();
session.Save(product);
la propiedad product.StorageHistories es NULL y obtengo una NullReferenceException. Entonces, ¿cómo agrego elementos a esa colección, o debo seguir el camino para agregar los elementos StorageHistory a la base de datos?
Solución
Siempre hago lo siguiente en el ctor del objeto padre:
historias = nuevo HashedSet ();
Esto cubre el caso de uso Guardar (). El caso de uso Load () / Get (), etc. está cubierto por NHibernate como usted indicó.
Otros consejos
¿Por qué no?
private ISet _StorageHistories;
public virtual ISet StorageHistories {
protected set { _StorageHistories = value;}
get { if (_StorageHistories == null) _StorageHistories = new HashSet();
return _StorageHistories;
}
}
Por supuesto, si pasa por la molestia de tener un privado de todos modos, también podría ponerlo en el constructor.