NHibernate essaie de charger une petite hiérarchie de données. Mon modèle de domaine ressemble:Désireux de charger les collections enfant et enfant de l'enfant dans NHibernate
class GrandParent
{
int ID{get;set;}
IList<Parent> Parents {get; set;}
}
class Parent
{
IList<Child> Children {get; set;}
}
class Child
{
}
et je voudrais à la charge des parents désireux tous et les enfants pour un grand-parent donné. Cette requête Linq-to-NH crée le SQL correct et charge le GrandParent comme prévu: (l'exemple suppose que le grand-parent a 2 parents qui ont chacun 2 objets enfants - donc 4 objets enfants au total).
var linq = session.Linq<GrandParent>();
linq.Expand("Parents");
linq.Expand("Parents.Children");
linq.QueryOptions.RegisterCustomAction(c =>
c.SetResultTransformer(new DistinctRootEntityResultTransformer()));
var grandparent = (select g from session.Linq<GrandParent>()
where g.ID == 1
select g).ToList();
Assert(grandparent.Count == 1); //Works
Assert(grandparent.Parents.Count == 2); //Fails - count = 4!
La collection grandparent.Parents contient 4 éléments, dont 2 sont des doublons. Il semble que DistinctRootEntityResultTransformer ne fonctionne que sur les collections de niveau 1, de sorte que la collection Parents est dupliquée en fonction du nombre d'objets enfants de chaque parent.
Est-il possible que NH n'inclue que les objets Parent distincts?
Merci beaucoup.
Avez-vous pu résoudre ce problème? C'est vraiment énervant. –
Oui - voir mon commentaire ci-dessous sur la modification de IList pour ICollection et l'utilisation de 'set' dans les mappages. – Simon