Программно игнорировать детей с nHibernate - PullRequest
2 голосов
/ 22 декабря 2010

Я просто пытаюсь разобраться в nHibernate и получить запрос. При настройке файла сопоставлений (с Fluent или обычными файлами .hbm.xml) вы указываете отношения (пакеты; один-ко-многим и т. Д.) И подтипы - идея заключается в том (я считаю), что когда вы выбираете объект он также выбирает и сопоставляет данные. У меня вопрос, могу ли я программно сказать свой запрос, чтобы игнорировать эти отношения?

Итак, ниже есть класс Foo со списком объектов Bar. В файле сопоставлений это будет отношение один-ко-многим, и иногда я хочу получить Foo со всеми столбцами, НО иногда я хочу просто получить объект Foo без столбца по соображениям производительности. Как я могу это сделать?

public class Foo { public int Id { get; set; } public List<Bar> { get; set; } }
public class Bar { public int Id { get; set; }

Приветствия

1 Ответ

2 голосов
/ 22 декабря 2010

Отношение не должно загружаться автоматически, если вы не отключите Ленивая загрузка или не укажите, что оно будет загружено в запросе.

Редактировать:

ОтветитьВаши вопросы в комментариях ниже.

1) Это сделано как часть запроса.Базовый пример использования QueryOver в NHibernate 3.0 будет выглядеть примерно так:

var result = Session.QueryOver()
                    .Fetch(x => x.Category).Eager
                    .Where(x => x.Price > 10)
                    .List();

Я думаю, с ICriteria это "SetFetchMode (" Category ", FetchMode.Eager)"

2) Если вы включитебез отложенной загрузки на карту для объекта, он всегда будет загружен.Поэтому я предлагаю вам стремиться к загрузке по каждому запросу, чтобы избежать возможности загружать массивную цепочку данных или загружать данные, которые вам на самом деле не нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...