我正在尝试让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语句不同。
答案 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)