NHibernate:NHibernate.Criterion.SqlFunctionProjection没有持久性

Nig*_*gel 10 nhibernate

我使用的是NHibernate 2.0.0.4000版.

在我的一个查询中,我想利用sql函数dateadd添加一些天.这没有注册,所以我创建了自己的方言并注册了如下功能:

RegisterFunction("adddays", 
    new SQLFunctionTemplate(NHibernateUtil.DateTime, 
    "dateadd(dd, ?1, ?2)"));
Run Code Online (Sandbox Code Playgroud)

注册受到打击,似乎工作正常.我在DetachedCriteria查询中使用该函数,如下所示:

...
Restrictions.LtProperty("DateColumn1"
    Projections.SqlFunction("adddays", NHibernateUtil.DateTime,
        Projections.Constant(days),
        Projections.Property("DateColumn2"))
...
Run Code Online (Sandbox Code Playgroud)

条件从方法返回并传递给另一个查询.在执行最终查询时,我得到以下异常:

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)
       ...
Run Code Online (Sandbox Code Playgroud)

我见过的所有博文都没有提到这个问题.有人可以帮忙吗?

提前干杯.的NiGe.

Nig*_*gel 7

解决了它.

问题是由于我在别处使用Restrictions.Eq而不是Restrictions.EqProperty.前者没有重载(IProjection,IProjection),因此将第二个投影视为对象并将其传递给持久性.

感谢任何调查此事的人.奈杰尔.