मैं NHibernate का उपयोग कर रहा है और एक नामित क्वेरी के माध्यम से एक संग्रहीत प्रक्रिया बुला:सी # निरर्थक मूल्य टाइप किए गए मान एनआईवीबर्ननेट नामक IQuery पैरामीटर पर कैसे सेट किए जा सकते हैं?
संग्रहीत प्रक्रिया मापदंडों के<sql-query name="SearchStuff" read-only="true" cacheable="true">
<return class="ResultEntity" />
EXEC [SearchStuff] ?, ?, ? </sql-query>
कई जानबूझ कर व्यर्थ कर रहे हैं - यह बदला नहीं जा सकता।
सी #:
public static class QueryExtensions
{
public static void SetInt32(this IQuery query, int position, int? val)
{
if (val.HasValue)
{
query.SetInt32(position, val.Value);
}
else
{
query.SetParameter(position, null);
}
}
public static void SetInt32(this IQuery query, string name, int? val)
{
if (val.HasValue)
{
query.SetInt32(name, val.Value);
}
else
{
query.SetParameter(name, null);
}
}
public static void SetDateTime(this IQuery query, int position, DateTime? val)
{
if (val.HasValue)
{
query.SetDateTime(position, val.Value);
}
else
{
query.SetParameter(position, null);
}
}
public static void SetDateTime(this IQuery query, string name, DateTime? val)
{
if (val.HasValue)
{
query.SetDateTime(name, val.Value);
}
else
{
query.SetParameter(name, null);
}
}
}
मैं कोशिश की है:
IQuery listQuery = this.Session.GetNamedQuery("SearchStuff");
listQuery.SetInt32(0, param1);
listQuery.SetDateTime(1, param2);
listQuery.SetString(2, param3);
IList<ResultEntity> results = listQuery.List<ResultEntity>();
दुर्भाग्य से, NHibernate किसी भी SetXyz प्रदान नहीं करता है() नल मूल्य प्रकार के लिए तरीकों तो मैं क्षतिपूर्ति करने के लिए कुछ विस्तार विधियां जोड़ने की कोशिश की इनमें से विभिन्न संस्करण लेकिन कोई काम नहीं। कोड ऊपर त्रुटि के साथ विफल:
System.ArgumentNullException : A type specific Set(position, val) should be called because the Type can not be guessed from a null value.
मैं भी करने की कोशिश की बस पैरामीटर नहीं लेकिन NHibernate हर पैरामीटर सेट किया हुआ हो। मैंने एक ही परिणाम के साथ दोनों स्थितित्मक और नामित संस्करणों का उपयोग करने की कोशिश की है।
क्या NHibernate नामित प्रश्नों में टाइप किए गए मानकों को मानने के लिए शून्य मान असाइन करने का कोई तरीका है?
कि के लिए धन्यवाद, मेरी मदद करो :) – RhysC
आप तरीकों आप भी चेनिंग सही है, जैसे मिल से क्वेरी वस्तु वापस लौटाते हैं: सार्वजनिक स्थिर IQuery SetDateTime (... ... retrun क्वेरी; –
ठोस एक्सटेंशन –