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

时间:2009-06-09 11:08:21

标签: nhibernate

我使用的是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 个答案:

答案 0 :(得分:7)

解决了它。

问题原因是我在Restrictions.Eq而不是Restrictions.EqProperty的其他地方使用了该问题。前者没有(IProjection,IProjection)的重载,因此将第二个投影视为对象并将其传递给持久性。

感谢所有对此进行调查的人。 佰。

答案 1 :(得分:1)

对于nhibernet解决方案中的No Persister异常是

只需右键单击相应的hbm文件 - >属性 - >更改类型Build Action->嵌入式资源

使用上述步骤应用程序将正常工作