NHibernate, QueryOver возвращает список со свойством list - PullRequest
0 голосов
/ 30 октября 2018

У меня есть такие классы, как:

public class A : BaseTableFields
{
    public virtual string Name { get; set; }
    public virtual IList<B> propB { get; set; }
}

public class B : BaseTableFields
{
    public virtual A propA { get; set; }
    public virtual IList<C> propC { get; set; }
}

public class C : BaseTableFields
{
    public virtual B propB { get; set; }
    public virtual IList<D> propD { get; set; }
}

Так что каждый мой класс имеет отношение один ко многим к классу ниже. Как написать наиболее эффективный запрос, который я получаю Список типа A (List listOfA), содержащий записи в listOfA.propB, а также listOfA.propB, содержащий все ссылочные записи в listOfA.propB.propC и т. Д.

Пожалуйста, помогите.

Для начала предположим, что:

var list = Session.QueryOver<A>().Where(x=>x.Name == "test").List().ToList();

возвращает мне список с 3 элементами типа A, но его свойство propB пусто.

1 Ответ

0 голосов
/ 30 октября 2018

Я бы предложил использовать функции «Fetch» ​​или «FetchMany» в провайдере NHibernate LINQ. Примеры в этой статье о том, что он на самом деле делает, и показывает SQL, который он сгенерирует.

Отработка вашего примера, который привел бы к следующему:

var list = Session.QueryOver<A>()
                  .Where(x => x.Name == "test")
                  .FetchMany(x => x.propB)
                  .ThenFetchMany(x => x.propC)
                  .ToList();

Если это по-прежнему вызывает у вас проблемы, возможно, проблема связана с файлами сопоставления между отношениями сущностей один-ко-многим.

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