2012-08-28 36 views
2

我试图让nhibernate在渴望获取中使用别名。林不知道它可能。Nhibernate QueryOver在Eager Fetch中使用别名

我想在我的提取中使用别名(在我的例子中是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语句不同。

+0

为什么您需要使用'JoinAlias'中的别名? –

回答

3

尝试这样:

B b = null; 

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

很好的答案。另外,这里有关于别名的官方文档的链接:http://nhforge.org/doc/nh/en/index.html#queryqueryover-aliases –

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) 
+0

我想通过“INNER JOIN”你的意思是“左外连接”? ;)例如:https://gist.github.com/Meligy/877532 –

+1

@buli - 是的,谢谢,我更正了答案 – Shagglez