Hi,
I have a problem with Nhibernate Linq and Fetch
I would like to do this HQL in Linq :
SELECT fp
FROM FacturationPaye fp
LEFT JOIN FETCH fp.Dossier d
LEFT JOIN FETCH d.Agence a
LEFT JOIN FETCH a.Sitegeo sg
LEFT JOIN FETCH sg.Region r
WHERE r=:region
This give me this SQL :
select *
from `sesame`.`fp_facturationpaye` facturatio0_
left outer join `sesame`.`dossier` dossier1_ on
facturatio0_.`CodeDossier`=dossier1_.`CodeDossier`
left outer join `sesame`.`agence` agence2_ on
dossier1_.`CodeEntiteGADM`=agence2_.`codeEntiteGADM`
left outer join `sesame`.`sitegeo` sitegeo3_ on
agence2_.`codeSite`=sitegeo3_.`codeSite`
left outer join `sesame`.`region` region4_ on
sitegeo3_.`codeRegion`=region4_.`codeRegion`
where region4_.`codeRegion`='ENTRE'
But when i try to do this in LINQ, with this syntax :
var query = from fp in
NHibernateUtilPerso.QueryDAO().Linq<ADM_FacturationPayeModel.Model.FacturationPaye>()
.Fetch(fp => fp.Dossier).ThenFetch(a
=> a.Agence).ThenFetch(ag => ag.Sitegeo).ThenFetch(sg => sg.Region)
where fp.Dossier.Agence.Sitegeo.Region == region1
select fp ;
I get an Exception :
System.NotSupportedException: La méthode spécifiée n'est pas prise en
charge.
à
NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.GetClassName(IASTNode
querySource) dans d:\CSharp\NH\nhibernate\src\NHibernate\Hql\Ast\ANTLR
\PolymorphicQuerySourceDetector.cs:ligne 61
à
NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.Process(IASTNode
tree) dans d:\CSharp\NH\nhibernate\src\NHibernate\Hql\Ast\ANTLR
\PolymorphicQuerySourceDetector.cs:ligne 27
à NHibernate.Hql.Ast.ANTLR.AstPolymorphicProcessor.Process() dans d:
\CSharp\NH\nhibernate\src\NHibernate\Hql\Ast\ANTLR
\AstPolymorphicProcessor.cs:ligne 30
à NHibernate.Hql.Ast.ANTLR.AstPolymorphicProcessor.Process(IASTNode
ast, ISessionFactoryImplementor factory) dans d:\CSharp\NH\nhibernate
\src\NHibernate\Hql\Ast\ANTLR\AstPolymorphicProcessor.cs:ligne 24
à
NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IASTNode
ast, String queryIdentifier, String collectionRole, Boolean shallow,
IDictionary`2 filters, ISessionFactoryImplementor factory) dans d:
\CSharp\NH\nhibernate\src\NHibernate\Hql\Ast\ANTLR
\ASTQueryTranslatorFactory.cs:ligne 33
à
NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(String
queryIdentifier, IQueryExpression queryExpression, String
collectionRole, Boolean shallow, IDictionary`2 filters,
ISessionFactoryImplementor factory) dans d:\CSharp\NH\nhibernate\src
\NHibernate\Hql\Ast\ANTLR\ASTQueryTranslatorFactory.cs:ligne 27
à
NHibernate.Engine.Query.HQLExpressionQueryPlan.CreateTranslators(String
expressionStr, IQueryExpression queryExpression, String
collectionRole, Boolean shallow, IDictionary`2 enabledFilters,
ISessionFactoryImplementor factory) dans d:\CSharp\NH\nhibernate\src
\NHibernate\Engine\Query\HQLExpressionQueryPlan.cs:ligne 34
à NHibernate.Engine.Query.HQLExpressionQueryPlan..ctor(String
expressionStr, IQueryExpression queryExpression, String
collectionRole, Boolean shallow, IDictionary`2 enabledFilters,
ISessionFactoryImplementor factory) dans d:\CSharp\NH\nhibernate\src
\NHibernate\Engine\Query\HQLExpressionQueryPlan.cs:ligne 23
à NHibernate.Engine.Query.HQLExpressionQueryPlan..ctor(String
expressionStr, IQueryExpression queryExpression, Boolean shallow,
IDictionary`2 enabledFilters, ISessionFactoryImplementor factory) dans
d:\CSharp\NH\nhibernate\src\NHibernate\Engine\Query
\HQLExpressionQueryPlan.cs:ligne 17
à
NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(IQueryExpression
queryExpression, Boolean shallow, IDictionary`2 enabledFilters) dans d:
\CSharp\NH\nhibernate\src\NHibernate\Engine\Query
\QueryPlanCache.cs:ligne 88
à
NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(IQueryExpression
queryExpression, Boolean shallow) dans d:\CSharp\NH\nhibernate\src
\NHibernate\Impl\AbstractSessionImpl.cs:ligne 302
à NHibernate.Impl.AbstractSessionImpl.CreateQuery(IQueryExpression
queryExpression) dans d:\CSharp\NH\nhibernate\src\NHibernate\Impl
\AbstractSessionImpl.cs:ligne 258
à NHibernate.Linq.NhQueryProvider.PrepareQuery(Expression
expression, IQuery& query, NhLinqExpression& nhQuery) dans d:\CSharp\NH
\nhibernate\src\NHibernate\Linq\NhQueryProvider.cs:ligne 42
à NHibernate.Linq.NhQueryProvider.Execute(Expression expression)
dans d:\CSharp\NH\nhibernate\src\NHibernate\Linq
\NhQueryProvider.cs:ligne 25
à NHibernate.Linq.NhQueryProvider.Execute[TResult](Expression
expression) dans d:\CSharp\NH\nhibernate\src\NHibernate\Linq
\NhQueryProvider.cs:ligne 102
à Remotion.Data.Linq.QueryableBase`1.GetEnumerator()
à System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
à System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
à ADM_FacturationPayeIHM.App.OnStartup(StartupEventArgs e) dans C:
\CSHARP\VSDEVTF\ADM_FacturationPaye\ADM_FacturationPayeIHM
\App.xaml.cs:ligne 165
If i use this Linq :
var query = (from fp in
NHibernateUtilPerso.QueryDAO().Linq<ADM_FacturationPayeModel.Model.FacturationPaye>()
where fp.Dossier.Agence.Sitegeo.Region == region1
select fp) ;
I have this SQL :
select *
from `sesame`.`fp_facturationpaye` facturatio0_,
`sesame`.`dossier` dossier1_,
`sesame`.`agence` agence2_,
`sesame`.`sitegeo` sitegeo3_
where facturatio0_.`CodeDossier`=dossier1_.`CodeDossier`
and dossier1_.`CodeEntiteGADM`=agence2_.`codeEntiteGADM`
and dossier1_.`CodeAgceGADM`=agence2_.`codeAgenceGADM`
and agence2_.`codeSite`=sitegeo3_.`codeSite`
and sitegeo3_.`codeRegion`='ENTRE'
This syntax use the Cartesian product, but i would like to use the
"LEFT JOIN".
How can I write this query in linq?
Thank's in advance.
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en.