QueryOver завершается неудачно с не удалось разрешить свойство - PullRequest
2 голосов
/ 03 апреля 2012

Я использую NHibernate 3.0 и сравнивал Query и QueryOver

var p = _prepo.Query<Party>()
            .Where(c => c.Person.LastName == "Bobby")
            .FirstOrDefault();

Вышеописанное работает, я получаю прокси-класс для p.Person, если я просматриваю граф объекта.

var p = _prepo.QueryOver<Party>()
            .Where(c => c.Person.LastName == "Bobby")
            .FirstOrDefault();

Это ошибка с ошибкой ==> не удалось разрешить свойство: Person.LastName из:

Почему?

Ответы [ 2 ]

6 голосов
/ 03 апреля 2012

Я не знаком с провайдером Linq, но при использовании QueryOver вы должны использовать объединение, чтобы выполнить такой запрос:

Пример 1

IQueryOver<Cat,Kitten> catQuery =
session.QueryOver<Cat>()
    .JoinQueryOver(c => c.Kittens)
        .Where(k => k.Name == "Tiddles");

Пример 2

Cat catAlias = null;
Kitten kittenAlias = null;

IQueryOver<Cat,Cat> catQuery =
    session.QueryOver<Cat>(() => catAlias)
        .JoinAlias(() => catAlias.Kittens, () => kittenAlias)
        .Where(() => catAlias.Age > 5)
        .And(() => kittenAlias.Name == "Tiddles");
0 голосов
/ 13 ноября 2013

Это работает, когда вы используете Linq в этом случае, потому что фильтрация выполняется на клиенте, а не в базе данных. Так что на самом деле это IEnumerable версия Где работает, которая не связана с NHibernate.

QueryOver использует Expression<Func<T,object>>, который NHibernate пытается преобразовать в SQL, но не удается. По неизвестным мне причинам вы должны явно присоединиться, используя JoinQueryOver или JoinAlias.

Дополнительная информация о QueryOver здесь: http://nhibernate.info/blog/2009/12/17/queryover-in-nh-3-0.html

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