NHibernate: свойства проекции и ссылочного типа - PullRequest
3 голосов
/ 06 октября 2011

Я использую nHibernate и у меня есть 3 сопоставленных класса - A, B, C. Класс A выглядит следующим образом:

public class A
{
 public virtual string StringProp1 { get; set; }
 public virtual string StringProp2 { get; set; }
 public virtual B BProp { get; set; }
 public virtual C CProp { get; set; }
}

Все работает отлично, но я хотел бы сделать следующеенекоторая оптимизация.Моя цель - иметь возможность динамически указывать, какие свойства следует загружать (из БД).Поэтому я не могу просто пометить некоторые свойства как ленивые в отображении.Я думаю, что это должно работать следующим образом:

ICriteria criteria = session.CreateCriteria<A>();
criteria.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("StringProp1"), "StringProp1")
.Add(Projections.Property("BProp"), "BProp"));
criteria.SetResultTransformer(Transformers.AliasToBean<A>());
return criteria.List<A>();

Но это не работает для свойства ссылочного типа (например, BProp), даже если я добавлю псевдоним в критерии.Я получаю исключение «Индекс за пределами массива» в последней строке.

Если я удаляю строку, которая добавляет проекцию BProp, это работает и возвращает мне экземпляр класса A, где заполнен только StrinProp1со значением.Но я хочу, чтобы в BProp был загружен соответствующий экземпляр класса B.

Есть предложения?

1 Ответ

0 голосов
/ 07 октября 2011

Не похоже на правильный способ делать вещи. Если вы пытаетесь загрузить BProp, вы должны сделать что-то вроде:

criteria.SetFetchMode("BProp", SetFetchMode.Eager);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...