7
短版
SqlMapper.Query<T>
似乎忽略我的註冊TypeHandler<T>
類型處理器<T>似乎並沒有被稱爲
加長版
這裏有一個簡單的查詢:
SELECT 'Foo' AS CategoryName, 200 AS CategoryRating
。 ..這裏有兩個POCO:
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");
我從Dapper得到一個異常 - 它無法解析第一列的結果。 I expected小巧玲瓏來激發我的自定義類型處理程序!
我想我錯過了一些非常非常明顯的東西。請告訴我我是多麼的愚蠢!
爲什麼三江源 - 我的帽子的頂端到您,先生:) – Dan
什麼SqlMapper.AddTypeHandler(新StringDictionaryValueHandler()); public class StringDictionaryValueHandler:SqlMapper.TypeHandler> {...} –