लघु संस्करण
SqlMapper.Query<T>
मेरे पंजीकृत TypeHandler<T>
TypeHandler <T> यहाँ एक सरल प्रश्न है
लंबे संस्करण
अनदेखी करने के लिए लगता है के नाम से जाना प्रतीत नहीं होता:
SELECT 'Foo' AS CategoryName, 200 AS CategoryRating
। ..और यहां दो पीओसीओ हैं:
public class RatingValue
{
public Int32 Value { get; set; }
// ... some other properties etc ...
}
public class MyResult
{
public String CategoryName { get; set; }
public RatingValue CategoryRating { get; set; }
}
मैं एक नया TypeHandler
कार्यान्वयन जो कि CategoryRating Int32
कर देना चाहिए एक RatingValue
वस्तु में बना लिया है:
public class RatingValueHandler: SqlMapper.TypeHandler<RatingValue>
{
public override RatingValue Parse(object value)
{
if (value is Int32)
return new RatingValue() { Value = (Int32)value };
throw new FormatException("Invalid conversion to RatingValue");
}
public override void SetValue(System.Data.IDbDataParameter parameter, RatingValue value)
{
// ... null, range checks etc ...
parameter.DbType = System.Data.DbType.Int32;
parameter.Value = Int32.Parse(value.Value);
}
}
अब, मेरी क्वेरी चलाने मैं इस तरह मेरी नई हैंडलर जोड़ रहा से पहले:
SqlMapper.AddTypeHandler<RatingValue>(new RatingValueHandler());
हालांकि
, जब मैं इस चलाएँ:
c.Query<MyResult>("SELECT 'Foo' AS CategoryName, 200 AS CategoryRating");
मुझे डैपर से अपवाद मिलता है - यह कॉलम 1 में परिणाम का विश्लेषण नहीं कर सका। I अपेक्षित डैपर मेरे कस्टम प्रकार हैंडलर को आग लगाने के लिए!
मुझे लगता है कि मैं बहुत, बहुत स्पष्ट कुछ याद कर रहा हूँ। कृपया मुझे बताओ कि मैं कितना मूर्ख हूँ!
क्यों thankyou - आप के लिए मेरे टोपी के एक टिप, सर :) – Dan
क्या SqlMapper.AddTypeHandler के बारे में (नई StringDictionaryValueHandler()); सार्वजनिक वर्ग StringDictionaryValueHandler: SqlMapper.TypeHandler> {...} –