NHibernate: нет сохранения для NHibernate.Criterion.SqlFunctionProjection - PullRequest
10 голосов
/ 09 июня 2009

Я использую NHibernate версии 2.0.0.4000.

В одном из моих запросов я хотел использовать функцию sql dateadd для добавления количества дней. Это не было зарегистрировано, поэтому я создал свой собственный диалект и зарегистрировал функцию следующим образом:

RegisterFunction("adddays", 
    new SQLFunctionTemplate(NHibernateUtil.DateTime, 
    "dateadd(dd, ?1, ?2)"));

Регистрация получает удар и, кажется, работает нормально. Я использую функцию в запросе DetachedCriteria следующим образом:

...
Restrictions.LtProperty("DateColumn1"
    Projections.SqlFunction("adddays", NHibernateUtil.DateTime,
        Projections.Constant(days),
        Projections.Property("DateColumn2"))
...

Критерии возвращаются из метода и передаются другому запросу. При выполнении окончательного запроса я получаю следующее исключение:

NHibernate.MappingException was caught
  Message="No persister for: NHibernate.Criterion.SqlFunctionProjection"
  Source="NHibernate"
  StackTrace:
       at NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(String entityName,
            Boolean throwIfNotFound)
       at NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(String entityName)
       ...

Ни в одном из опубликованных мною постов эта проблема не упоминается. Кто-нибудь может помочь?

Приветствия заранее. Nige.

Ответы [ 2 ]

7 голосов
/ 09 июня 2009

Решил.

Проблема была вызвана моим использованием в другом месте Restrictions.Eq, а не Restrictions.EqProperty. Первый не имеет перегрузки для (IProjection,IProjection) и поэтому обрабатывал второй выступ как объект и передавал его персистеру.

Спасибо всем, кто исследовал это. Найджел.

1 голос
/ 03 июля 2012

Исключение No Persister в решении nhibernet составляет

просто щелкните правой кнопкой мыши соответствующий файл hbm -> Свойства-> измените тип Build Action-> на Встроенный ресурс

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

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