MISE À JOUR 2:
https://www.nuget.org/packages/NHibernate.Linq.InnerJoinFetch
Profitez !!!
MISE À JOUR:
J'ai finalement réussi à le faire et a envoyé la demande de traction followign à l'équipe NH
https://github.com/nhibernate/nhibernate-core/pull/210
En fait, il est possible, mais vous avez besoin de pirater NHibernate , la ligne à changer est celle-ci
tree.AddFromClause(tree.TreeBuilder.LeftFetchJoin(join, tree.TreeBuilder.Alias(alias)));
dans
tree.AddFromClause(tree.TreeBuilder.FetchJoin(join, tree.TreeBuilder.Alias(alias)));
le fichier ProcessFetch.cs
Il semble que le comportement est pour hardcoded Linq et je pense que son parce qu'elle a utilisé les méthodes d'extension afin d'envoyer ce qu'il faut utiliser pour la DefaultQueryProvider et re-LINQ traitement, j'ai encore besoin de comprendre comment spécifier le type de jointure que vous voulez faire sur la recherche avide en utilisant l'API linq mais je travaille dessus, j'espère envoyer une demande de traction à l'équipe NH afin qu'ils puissent mettre ceci dans la base de code, pour l'instant dans mon projet, je vais utiliser ma version NH personnalisée
Merci pour la suggestion QueryOver, au moins, ce serait plus de typesafe que HQL. J'ai aussi essayé 'not-null =" true "' et comme vous l'avez dit, cela ne change rien. – cremor
Juste mis à jour avec l'exemple de syntaxe d'expression LINQ même si cela ne résout pas le problème, pourrait vous donner une autre idée. –
J'ai essayé cela combiné avec 'Fetch()'. Semble fonctionner, mais produit un SQL très moche et inefficace (quelque chose comme 'Order left rejoindre OrderJoinTable left rejoindre OrderJoinTable2, Customer left rejoindre OrderJoinTable left rejoindre OrderJoinTable2 où Order.ID = Customer.ID' où OrderJoinTables proviennent de mes éléments dans l'entité). –
cremor