嗨gyus 我在这里写的....我有一个问题:-) 在这里我的情况:
表A(类别){ID,List,List} 表B(CategoryLanguage){IDCategory,IDLanguage,Description} 表C(子类别){IDCategory,ID,List} 表D(SubCategoryLanguage){IDSubCategory,IDLanguage,Description}
这里是我的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不会过滤语言字段,当我循环到子类别(在我的视图中打印树类别=&gt;子类别)时,它会为每个子类别启动查询! (我使用NHibernate Profiler看到它) 我不使用Lazy Loading,但使用JoinAlias我希望看到所有数据都加入。
任何人都可以帮助我吗? 谢谢!
答案 0 :(得分: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>();