Почему я получаю сообщение об ошибке при попытке запросить дочернее свойство в NHibernate? - PullRequest
0 голосов
/ 29 декабря 2011

Кажется, я получаю сообщение об ошибке при запросе объекта, который имеет дочерний объект свойства POCO:

could not resolve property: PreferredLanguage.Name of: AcademyData.Entities.StudentsInformation

Мой запрос:

Session.QueryOver<StudentsInformation>().Where(x => x.Active == 1 && x.PreferredLanguage.Name == firstName).List()

Если я удалю критерии x.PreferredLanguage.Name, он сработает, и я увижу правильное значение имени объекта, но не позволит мне использовать его в качестве запроса. Что я делаю не так?

Вот мое отображение:

    References(x => x.PreferredLanguage).Column("PreferredLanguageID");

Кроме того, я разделил свои POCO и отображения на 2 отдельные сборки, если это имеет какое-либо значение. Я настраиваю отображение так:

.Mappings(x => x.FluentMappings.AddFromAssemblyOf<AcademyData.Dummy>().AddFromAssemblyOf<data.core.Dummy>())

Игнорируйте манекена, использовал его для проверки чего-либо.

РЕДАКТИРОВАТЬ: я проверил его с использованием объекта из той же сборки, и проблема все еще существует. EDIT:

Я нашел решение своей проблемы:

return SessionManager.Session.QueryOver<StudentsInformation>().JoinQueryOver<PersonBase>(s => s.Person).Where(p => p.FirstName == firstName).List();

Это правильный способ сделать это, или я все еще могу сделать это без JoinQueryOver для другой таблицы?

Ответы [ 2 ]

0 голосов
/ 29 декабря 2011

В качестве альтернативы вы можете использовать LINQ вместо QueryOver:

return Session.Query<StudentsInformation>()
              .Where(x => x.Active == 1 && x.PreferredLanguage.Name == firstName)
              .ToList()
0 голосов
/ 29 декабря 2011

Вы должны присоединиться к дочерней сущности, если хотите запросить эту дочернюю сущность. Это правильный способ сделать это. Вы также можете использовать JoinAlias, если хотите.

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