我使用的是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。
答案 0 :(得分:7)
解决了它。
问题原因是我在Restrictions.Eq
而不是Restrictions.EqProperty
的其他地方使用了该问题。前者没有(IProjection,IProjection)
的重载,因此将第二个投影视为对象并将其传递给持久性。
感谢所有对此进行调查的人。 佰。
答案 1 :(得分:1)
对于nhibernet解决方案中的No Persister异常是
只需右键单击相应的hbm文件 - >属性 - >更改类型Build Action->嵌入式资源
使用上述步骤应用程序将正常工作