Criando um objeto NHibernate e inicializar um conjunto de
-
06-07-2019 - |
Pergunta
Eu tenho uma tabela chamada produtos e eu tenho a tabela StorageHistory .
Agora, o Produto contém uma referência a StorageHistory na sua mapeamentos
<set name="StorageHistories" lazy="false">
<key column="ProductId" />
<one-to-many class="StorageHistory" />
</set>
E ele funciona, quando eu recuperar um objeto do ORM eu recebo um ISet vazia.
O que me dá uma dor de cabeça é como construir o objeto em primeiro lugar. Quando eu faço o seguinte:
var product = new Product();
session.Save(product);
a propriedade product.StorageHistories é NULL e eu recebo um NullReferenceException. Então, como faço para adicionar itens a essa coleção, ou devo ir a maneira de adicionar-se os itens StorageHistory ao DB?
Solução
Eu sempre faço o seguinte no ctor do objeto pai:
histórias = new HashedSet ();
Isto cobre o caso de uso Save (). O Load () / get () etc usecase é coberto por NHibernate como você disse.
Outras dicas
Por que não?
private ISet _StorageHistories;
public virtual ISet StorageHistories {
protected set { _StorageHistories = value;}
get { if (_StorageHistories == null) _StorageHistories = new HashSet();
return _StorageHistories;
}
}
Claro, se você passar pela dificuldade de ter um de qualquer maneira privada assim como você pode colocá-lo no construtor.