Как стремиться загрузить внуков совокупности с помощью NHibernate? - PullRequest
1 голос
/ 16 июля 2009

У меня следующая структура класса:

class TestCase {
  public IList<Step> Steps { get; set; }
}

class Step { 
  public IList<Action> Actions { get; set; }
}

class Action { } 

Я хочу загрузить TestCase, все Step с и все Event с одним запросом и избежать проблемы выбора N + 1.

Этот пост решает проблему загрузки Step s с TestCase s (используя IMultiQuery), но как мне загрузить Action s тоже?

Ответы [ 2 ]

1 голос
/ 18 ноября 2009

Вы должны быть осторожны с вашим перекрестным продуктом здесь. Чтобы обрабатывать более одного уровня для извлечения информации, вам нужно использовать вместо или . Это гарантирует, что в вашем тестовом примере у вас не будет повторяющихся «шагов». Наконец, чтобы заставить это работать, используйте следующее:


var result =  session.CreateCriteria(typeof (TestCase))
                .CreateAlias("Steps", "s")
                .CreateAlias("s.Actions", "a")
                .SetResultTransformer(CriteriaUtil.DistinctRootEntity);
                .List();
0 голосов
/ 16 июля 2009

Вы можете сделать именно то, о чем говорилось в этом посте. Просто Add 3-ий критерий по 2-му критерию, вместо обоих по 1-му критерию.

var result = session.CreateMultiCriteria()
            .Add(criteria1
                .Add(criteria2)
            )
            .List();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...