Я использую 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.
Есть предложения?