2

熱心なフェッチでエイリアスを使用するように 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; 

ご覧のとおり、フェッチ コマンドは からの直接パスではなく、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 ステートメントが異なります。

4

2 に答える 2

3

次のようなことを試してください:

B b = null;

QueryOver<A>()
   .Fetch(x => x.B).Eager
   .JoinAlias(x => x.B, () => b, JoinType.LeftOuterJoin);
于 2012-08-28T14:41:22.123 に答える
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)
于 2013-02-06T16:51:02.480 に答える