2009-06-09 135 views
9

我正在使用NHibernate版本2.0.0.4000。NHibernate:沒有持久性NHibernate.Criterion.SqlFunctionProjection

在我的一個查詢中,我想利用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) 
     ... 

,我已經看到提到這個問題的博客文章都沒有。任何人都可以幫忙嗎?

提前歡呼。 尼日爾。

回答

6

解決了它。

該問題是由我在Restrictions.Eq而不是Restrictions.EqProperty其他地方使用造成的。前者對於(IProjection,IProjection)沒有超載,因此將第二個投影作爲對象處理並將其傳遞給持久對象。

感謝任何調查此事的人。奈傑爾, 。

1

對於nhibernet解決方案沒有留存的例外是

只是給出相應的HBM文件點擊右鍵 - >屬性 - >更改類型構建動作 - >以嵌入的資源

與上述步驟應用將工作正常