Иерархический мастер NHibernate Подробнее QueryOver - PullRequest
1 голос
/ 03 марта 2011

привет гюс Пишу вот так .... У меня проблема :-) Вот моя ситуация:

Таблица 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 не фильтрует поля «Языки», и когда я зацикливаюсь на подкатегориях (чтобы вывести на мой взгляд дерево Category => SubCategory), он запускает запрос для каждой подкатегории !! (Я видел это с помощью NHibernate Profiler) Я не использую отложенную загрузку, но использую JoinAlias. Я ожидал увидеть все данные объединенными.

Кто-нибудь может мне помочь? Спасибо!

1 Ответ

0 голосов
/ 03 марта 2011

Не уверен, поможет ли это, но в некоторых запросах, которые я создал с помощью 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>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...