2011-03-03 20 views
1

こんにちはgyus 私はここに書いている....私はここに :-)私の状況の問題をしました:NHibernateは階層的なマスター詳細QueryOver

表A(カテゴリ){ID、リスト、リスト}ここ 表B(CategoryLanguage){IDCategory、IDLanguage、説明} 表C(サブカテゴリ){IDCategory、ID、リスト} 表D(SubCategoryLanguage){IDSubCategory、IDLanguage、説明}

(別名を持つ)私QueryOverコード

Category Cat = null; 
CategoryLanguage catLang = null; 
SubCategory subCat = null; 
SubCategoryLanguage subCatLang = null;       

var qOver = _HibSession.QueryOver<Category>(() => Cat) 
    .Left.JoinAlias(() => Cat.Languages,() => catLang) 
     .Where(() => catLang.IDLanguage == IDLanguage) 
    .Left.JoinAlias(() => Cat.SubCategories,() => subCat) 
     .Left.JoinAlias(() => subCat.Languages,() => subCatLang) 
      .Where(() => subCatLang.IDLanguage == IDLanguage) 
    .OrderBy(() => Cat.ID).Asc 
    .List<Category>(); 

このクエリーでは、NHibernateは言語フィールドをフィルタリングしません。サブカテゴリ(私のビューにツリーのカテゴリ=>サブカテゴリを表示するために)にループすると、サブカテゴリごとにクエリが起動されます。 (NHibernate Profilerを使って見ました) 私は遅延読み込みを使用せず、JoinAliasを使用しています。

誰でも手伝ってもらえますか? ありがとうございました!

答えて

0

QueryOverを使用して作成したクエリの中に役立つかどうかはわかりませんが、フェッチモードを指定しました。

Category Cat = null; 
CategoryLanguage catLang = null; 
SubCategory subCat = null; 
SubCategoryLanguage subCatLang = null;       

var qOver = _HibSession.QueryOver<Category>(() => Cat) 
.Left.JoinAlias(() => Cat.Languages,() => catLang) 
.Fetch(x => x.Languages).Eager 
    .Where(() => catLang.IDLanguage == IDLanguage) 
.Left.JoinAlias(() => Cat.SubCategories,() => subCat) 
    .Left.JoinAlias(() => subCat.Languages,() => subCatLang) 
.Fetch(x => x.SubCategories).Eager 
     .Where(() => subCatLang.IDLanguage == IDLanguage) 
.OrderBy(() => Cat.ID).Asc 
.List<Category>(); 
+0

フェッチコードを追加しようとしましたが、結果は同じです。私のオブジェクトは複数のフィルタリングされたコンテンツを持たないように、私は詳細テーブルをフィルタリングできません。適切なソリューションを読み込むのが怠惰かもしれませんか? – Faber

関連する問題