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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top