Каков наилучший способ сделать нетерпеливые объединения в NHibernate? - PullRequest
3 голосов
/ 16 декабря 2010

Я использую NHibernate и начал использовать профилировщик NHibernate и понял, что я выполняю много SQL-запросов, которые мне не нужны. Одна из главных оптимизаций для меня - стремление к объединению заранее, чтобы избежать проблем с выбором N + 1.

Я пытаюсь выяснить, как наилучшим образом сделать активное соединение с помощью NHibernate:

IList projects = session.CreateQuery(
      "from Project p left join fetch p.Sponsors left join fetch p.Desks")
      .List();

Но это продолжает выдавать ошибку:

QueryException: не удалось разрешить свойство для спонсоров домена. Проект

Каков наилучший способ создания нетерпеливых объединений с помощью NHibernate?

Ответы [ 2 ]

2 голосов
/ 16 декабря 2010

Убедитесь, что в вашем объекте Project правильно указаны Спонсоры.

Должен (надеюсь) выглядеть примерно так:

 [BelongsTo(Column = "Sponsor_ID")]
    public Sponsor sponsors { get; set; }

То же самое должно быть сделано и со столами.* Возможно, стоит проверить http://nmg.codeplex.com/ на наличие хорошего картографического генератора с большим количеством опций.

Существует также Afo Castle Generator, у которого не так много опций и могут быть небольшие причуды, но он все еще работает.(Это тот, который я использовал изначально) http://www.agilityfororms.com/Home/Products/AfoCastleActiveRecordModelCodeGenerator/

Также, если вы смотрите на загруженную загрузку, вы всегда можете попробовать использовать критерии.

Некоторые хорошие учебники по Nhibernate можно найти здесь: http://www.summerofnhibernate.com/

2 голосов
/ 16 декабря 2010

Это исключение означает, что Project.Sponsors не отображается.

В любом случае, существует более удобный способ быстрой выборки коллекций, особенно при получении более одного: http://ayende.com/Blog/archive/2010/01/16/eagerly-loading-entity-associations-efficiently-with-nhibernate.aspx

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