Como associar associações de carga sem duplicação no NHibernate?
Eu precisaria carregar uma lista de objetos muito grandes com tantos filhos e filhos de crianças. qual é a melhor abordagem a ser adotada?
Estou usando o banco de dados Oracle 11g e escrevi o método abaixo, mas resulta em produto cartesiano (resultados duplicados):
public IList<ARNomination> GetByEventId(long eventId)
{
var session = this._sessionFactory.Session;
var nominationQuery = session.Query<ARNomination>().Where(n => n.Event.Id == eventId);
using (var trans = session.Transaction)
{
trans.Begin();
// this will load the Contacts in one statement
nominationQuery
.FetchMany(n => n.Contacts)
.ToFuture();
// this will load the CustomAttributes in one statement
nominationQuery
.FetchMany(n => n.CustomAttributes)
.ToFuture();
// this will load the nominations but joins those two tables in one statement which results in cartesian product
nominationQuery
.FetchMany(n => n.CustomAttributes)
.FetchMany(n => n.Contacts)
.ToFuture();
trans.Commit();
}
return nominationQuery.ToList();
}