1
J'ai trois entités, configurées commeNHibernate chercher crée requête à droite et effectue alors N + 1
Contact
HasOne(e => e.User).PropertyRef(e => e.Contact).Cascade.All();
User
HasMany(e => e.Requests);
References(e => e.Contact);
Request
References(e => e.User);
Et puis je requête comme ceci:
CurrentSession.Query<Request>()
.Fetch(x => x.User)
.ThenFetch(x => x.Contact)
.ToList();
Et il semble que Fetch travaille , parce que je vois d'abord sélectionner toutes les tables jointes (omis d'autres domaines par souci de brièveté):
SELECT request0_.Id as Id128_0_,
user1_.Id as Id131_1_,
contact2_.Id as Id77_2_,
FROM requests request0_
left outer join users user1_
on request0_.user_id = user1_.Id
left outer join contacts contact2_
on user1_.contact_id = contact2_.Id
Et puis suivez N + 1 se lète pour une raison quelconque, je ne peux pas comprendre et avoir aucune idée comment résoudre le problème:
SELECT user0_.Id as Id131_0_,
FROM users user0_
WHERE user0_.contact_id = 200 /* @p0 - contact_id */
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. – Paritosh
@Paritosh le lien ne changera pas – hazzik
Fait intéressant, je l'ai réécrit en utilisant des critères et cela a bien fonctionné. – Giedrius