Nhibernate QueryOver在即时获取中使用别名

Nhibernate QueryOver在即时获取中使用别名,nhibernate,queryover,Nhibernate,Queryover,我想让nhibernate在抓取时使用别名。我不确定这是否可能 我试图在获取中使用别名(在我的示例中是bAlias) QueryOver<A>() .JoinAlias(x => x.B, () => bAlias) .JoinAlias(x => x.B, () => bAlias2) .Where(() => bAlias2.Surname == "Smith") .Fetch(() => bAlias).Eager .Fetch((

我想让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; 
QueryOver()
.JoinAlias(x=>x.B,()=>bAlias)
.JoinAlias(x=>x.B,()=>bAlias2)
.其中(()=>bAlias2.姓氏==“史密斯”)
.Fetch(()=>bAlias)。渴望
.Fetch(()=>bAlias.C);
如您所见,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;
QueryOver()
.JoinAlias(x=>x.B,()=>bAlias)
.JoinAlias(x=>x.B,()=>bAlias2)
.其中(()=>bAlias2.姓氏==“史密斯”)
.Fetch(x=>x.B)
.Fetch(x=>x.B.C.),渴望;

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

尝试以下方法:

B b = null;

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

您只需使用联接即可,
Fetch
解析为
内部联接
左侧外部联接

QueryOver<A>() 
    .JoinAlias(x => x.B, () => bAlias) 
    .Where(() => bAlias.Surname == "Smith") 
    .Fetch(x => x.B).Eager 
    .JoinQueryOver(() => bAlias.C)
QueryOver()
.JoinAlias(x=>x.B,()=>bAlias)
.其中(()=>bAlias.姓氏==“Smith”)
.Fetch(x=>x.B)
.JoinQueryOver(()=>bAlias.C)

回答得好。另外,这里还有一个关于别名的官方文档链接:抱歉,伙计们,我想我需要更详细地解释一下我想要实现的目标。我试图在获取中使用别名(在我的示例中是bAlias)。QueryOver().JoinAlias(x=>x.B,()=>bAlias).JoinAlias(x=>x.B,()=>bAlias2.Where(()=>bAlias2.姓氏==“Smith”).Fetch(()=>bAlias.Eager.Fetch(()=>bAlias.C).Eager;如您所见,fetch命令使用的是2个别名,而不是@SteveParry的直接路径:您应该更新您的问题,提供更多详细信息。为什么需要使用
JoinAlias
中的别名?我猜“内部连接”是指“左外部连接”?)例子: