我使用的是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.
解决了它.
问题是由于我在别处使用Restrictions.Eq而不是Restrictions.EqProperty.前者没有重载(IProjection,IProjection),因此将第二个投影视为对象并将其传递给持久性.
感谢任何调查此事的人.奈杰尔.
| 归档时间: |
|
| 查看次数: |
5426 次 |
| 最近记录: |