Fetch.Join () не работает в Fluent NHibernate - PullRequest
11 голосов
/ 15 июня 2011

У меня есть следующее переопределение сопоставления на одной стороне отношения:

public void Override(AutoMapping<ItemAsmtDetailDh> mapping)
{
    mapping.HasMany<WAsmtDetail>(x => x.WAsmtDetails).Inverse().AsBag().Cascade.AllDeleteOrphan().Access.PascalCaseField(Prefix.Underscore).Not.LazyLoad().Fetch.Join();
}

и с другой стороны моих отношений:

public void Override(AutoMapping<WAsmtDetail> mapping)
{
    mapping.References<ItemAsmtDetailDh>(x => x.ItemAsmtDetailDh).Not.Nullable().Not.LazyLoad().Fetch.Join();
}

Когда я использую опцию ShowSql, я вижу, что она по-прежнему выдает отдельные операторы select для WAsmtDetails, давая мне страшную проблему "n + 1 selects". Почему ".Not.LazyLoad (). Fetch.Join ()" игнорируется?

Примечание: я использую Fluent NHibernate версии 1.1, , а не версии 2.1, из-за ошибки в более новой версии. (Подробнее об ошибке см. Мой ответ на этот вопрос .) Я использую NHibernate версию 2.1.2.4000.

1 Ответ

7 голосов
/ 16 июня 2011

Скорее всего, вы загружаете данные таким образом, что Fetch.Join() в отображении не влияет (например, HQL или Linq). Из документации NHibernate:

Стратегия выборки, определенная в документе сопоставления, влияет на:

  • поиск через Get () или Load ()
  • извлечение, которое происходит неявно при навигации по ассоциации
  • ICriteria запросов
  • HQL-запросы, если используется выборочная выборка
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...