Я новичок в stackoverflow, и я надеюсь, что этот вопрос будет оценен по достоинству.
Проще говоря: я выбираю все из таблицы x левой внешней таблицы соединения y. В таблице x слишком много столбцов, поэтому я создаю новый объект x. Этот объект используется для проекции. Я могу проецировать каждый столбец таблицы x, который захочу. Но когда я пытаюсь спроецировать / выбрать коллекцию (коллекцию таблицы y), я получаю ту же ошибку: «Индекс находился за пределами массива».
Мой вопрос: поддерживает ли NHibernate вообще выбор / проектирование коллекции? Потому что я видел этот вопрос несколько раз, выполняя поиск в Google (и stackoverflow), но ни на один из этих вопросов не было дано ответа.
Пример кода:
public class X
{
public virtual int ID { get; set; }
public virtual int IDontNeedMoreInfoAboutClassXItTakesToMuchTimeToRetrieve { get; set; }
public virtual IList<Y> YCollection { get; set; }
}
public class Y
{
public virtual int YID { get; set; }
}
public class XRepository{
public ISession Session {get; set;}
public IList<X> Get()
{
X xAlias = null;
Y yAlias = null;
X resultAlias = null;
return Session.QueryOver<X>()
.JoinAlias(() => xAlias.YCollection, () => yAlias, JoinType.LeftOuterJoin)
.SelectList(list => list
.SelectGroup(() => xAlias.ID).WithAlias(() => resultAlias.ID)
.SelectGroup(() => xAlias.YCollection).WithAlias(() => resultAlias.YCollection)) // Index was outside the bounds of the array
.TransformUsing(Transformers.AliasToBean<X>()).List<X>();
}
}
X
это DTO или сопоставленный класс? - person Andrew Whitaker   schedule 24.08.2012Y
отображена правильно, то все, что вам нужно сделать, этоSession.QueryOver<X>().Fetch(x => x.YCollection).Eager
. nHib сгенерирует для вас левое внешнее соединение. Любое из свойствX
, которое вам не нужно, можно установить наFetch().Lazy
- person J. Ed   schedule 24.08.2012