Nhibernate QueryOver在Eager Fetch中使用别名

时间:2012-08-28 14:11:30

标签: nhibernate queryover

我正在尝试让nhibernate在急切的提取中使用别名。我不确定它是否可能。

我正在尝试在我的提取中使用别名(在我的示例中为bAlias)。

QueryOver<A>() 
.JoinAlias(x => x.B, () => bAlias) 
.JoinAlias(x => x.B, () => bAlias2) 
.Where(() => bAlias2.Surname == "Smith") 
.Fetch(() => bAlias).Eager 
.Fetch(() => bAlias.C).Eager; 

正如您所看到的,fetch命令使用的是2个别名而不是直接路径。

上述代码不起作用。有效的代码是

QueryOver<A>() 
.JoinAlias(x => x.B, () => bAlias) 
.JoinAlias(x => x.B, () => bAlias2) 
.Where(() => bAlias2.Surname == "Smith") 
.Fetch(x => x.B).Eager 
.Fetch(x => x.B.C).Eager;

正如您所看到的Fetch语句不同。

2 个答案:

答案 0 :(得分:3)

尝试这样的事情:

B b = null;

QueryOver<A>()
   .Fetch(x => x.B).Eager
   .JoinAlias(x => x.B, () => b, JoinType.LeftOuterJoin);

答案 1 :(得分:0)

您可以改为使用联接,Fetch解析为 INNER JOIN LEFT OUTER JOIN

QueryOver<A>() 
    .JoinAlias(x => x.B, () => bAlias) 
    .Where(() => bAlias.Surname == "Smith") 
    .Fetch(x => x.B).Eager 
    .JoinQueryOver(() => bAlias.C)