Несколько выборок в ThenFetch - PullRequest
5 голосов
/ 21 октября 2011

У меня есть связанная сущность с <many-to-one>, и у этой сущности есть две <many-to-one>, которые я хочу получить сразу. Я могу добиться этого с помощью этого запроса:

 var tshead = session.Query<MainEntity>()
                .Fetch(r=>r.FirstAssoc).ThenFetch(p=>p.Other)
                .Fetch(r=>r.FirstAssoc).ThenFetch(p=>p.Another)
                .Take(10)
                .ToList();

Как видите, мне пришлось написать дважды .Fetch(r=>r.FirstAssoc) Я уверен, что могу избежать этого, но я не могу понять, как. Есть идеи?

Спасибо!

1 Ответ

3 голосов
/ 18 ноября 2011

Если вы выберете конкретную 'MainEntity', вы можете сделать это, используя QueryOver, например:

 FirstAssoc firstAssoc = null;
 Other other = null;
 Another another = null;

 tshead = session.QueryOver<MainEntity>()
               .Where(x => x.Id == id)
               .JoinAlias(x => x.FirstAssoc, () => firstAssoc)
               .JoinAlias(() => firstAssoc.Other, () => other)
               .JoinAlias(() => firstAssoc.Another, () => another)
               .SingleOrDefault();

Я написал об этом здесь:

http://www.philliphaydon.com/2011/04/nhibernate-querying-relationships-are-depth/

Вы не можете сделать:

Один-Много-Много

только Один-Много-Один .

Я не уверен, что вы можете сделать Много-много-один , преобразовать это было бы слишком сложно.

...