2009-06-09 9 views
9

मैं NHibernate संस्करण 2.0.0.4000 का उपयोग कर रहा हूं।NHibernate: NHibernate के लिए कोई persister.Criterion.SqlFunctionProjection

मेरे प्रश्नों में से एक में मैं कई दिनों के लिए एसक्यूएल फ़ंक्शन डेटड का उपयोग करना चाहता था। यह पंजीकृत नहीं था इसलिए मैंने अपनी खुद की बोली बनाई और फ़ंक्शन को निम्नानुसार पंजीकृत किया:

RegisterFunction("adddays", 
    new SQLFunctionTemplate(NHibernateUtil.DateTime, 
    "dateadd(dd, ?1, ?2)")); 

पंजीकरण हिट हो जाता है और ठीक काम करता प्रतीत होता है।

... 
Restrictions.LtProperty("DateColumn1" 
    Projections.SqlFunction("adddays", NHibernateUtil.DateTime, 
     Projections.Constant(days), 
     Projections.Property("DateColumn2")) 
... 

मापदंड एक विधि से लौटे और एक अन्य प्रश्न के पारित हो जाता है: इस प्रकार मैं एक DetachedCriteria क्वेरी में समारोह का उपयोग करें। अंतिम क्वेरी के निष्पादन पर मुझे निम्नलिखित अपवाद प्राप्त होता है:

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 के अन्य उपयोग के कारण हुई थी। पूर्व में (IProjection,IProjection) के लिए अधिभार नहीं है और इसलिए दूसरे प्रक्षेपण को ऑब्जेक्ट के रूप में पेश कर रहा था और इसे एक उत्थान में पास कर रहा था।

इस पर जांच करने वाले किसी भी व्यक्ति के लिए धन्यवाद। निगेल।

1

लिए nhibernet समाधान में कोई Persister अपवाद

है

सिर्फ संबंधित HBM फाइल पर राइट क्लिक देना -> गुण> ऊपर चरण आवेदन के साथ एंबेडेड संसाधन

के प्रकार बिल्ड एक्शन> बदल ठीक काम करेगा