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 */ 

Répondre

1

Actuellement, il est un bug dans NHibernate.

+0

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

+0

@Paritosh le lien ne changera pas – hazzik

+0

Fait intéressant, je l'ai réécrit en utilisant des critères et cela a bien fonctionné. – Giedrius