NHibernate.QueryException с тем, что выглядит как простое выражение запроса - PullRequest
0 голосов
/ 02 августа 2011

Мы пытаемся реализовать шаблон спецификации в нашем DAL, но столкнулись с некоторыми проблемами. Похоже, что NHibernate не может преобразовать выражение в нечто пригодное для использования, но я не уверен на 100%, является ли это проблемой.

У меня есть объект customer, который содержит объект номера социального страхования, который в свою очередь содержит свойство LastSegment, которое просто возвращает последние четыре цифры ssn. При создании спецификации, которая выполняет поиск по последнему сегменту ssn, мы пришли к следующему выражению, где value - это критерии поиска, переданные пользователем:

a => a.Customer.Ssn.LastSegment == value

Кажется, довольно просто. Однако, когда это выполняется, генерируется исключение со следующей ошибкой:

NHibernate.QueryException : could not resolve property: Ssn.LastSegment of: [namespace].Customer

Правильно ли я интерпретирую ошибку в том, что NHibernate не может перевести мое выражение во что-то, что он может использовать? Есть ли способ обойти это?

В качестве дальнейшего примечания мы также получаем эту ошибку, когда вызываем ToString() для некоторых объектов.

EDIT: Копаясь в объекте SocialSecurityNumber, я заметил, что это структура вместо класса. Может ли это вызвать проблемы?

1 Ответ

0 голосов
/ 02 августа 2011

Похоже, что LastSegment - это свойство, которое вы добавили в частичный класс.Вы не сможете использовать это в своем выражении nhibernate.Вам нужно будет изменить выражение where, чтобы использовать фактическое свойство, сопоставленное с вашей базой данных (независимо от того, на что ссылается LastSegment).

Если Segment - строка, вы можете что-то сделатькак это:

a => a.Customer.Ssn.Segment.SubString(someNumber, 4) == value
...