提交 a540d7b1 编写于 作者: J johandanforth

Fix #253, use user defined TypeHandlers over internal implementations.

上级 a104524e
......@@ -910,15 +910,15 @@ internal static DbType LookupDbType(Type type, string name, bool demand, out ITy
{
return DbType.Binary;
}
if (typeHandlers.TryGetValue(type, out handler))
{
return DbType.Object;
}
if (typeof(IEnumerable).IsAssignableFrom(type))
{
return DynamicParameters.EnumerableMultiParameter;
}
if (typeHandlers.TryGetValue(type, out handler))
{
return DbType.Object;
}
#if !DNXCORE50
switch (type.FullName)
{
......
......@@ -3707,6 +3707,51 @@ public void SO24740733_TestCustomValueSingleColumn()
foo.Value.IsEqualTo(200);
}
public class StringListTypeHandler : Dapper.SqlMapper.TypeHandler<List<String>>
{
private StringListTypeHandler() { }
public static readonly StringListTypeHandler Default = new StringListTypeHandler();
//Just a simple List<string> type handler implementation
public override void SetValue(IDbDataParameter parameter, List<string> value)
{
parameter.Value = String.Join(",", value);
}
public override List<string> Parse(object value)
{
return ((value as String) ?? "").Split(',').ToList();
}
}
public class MyObjectWithStringList
{
public List<String> Names { get; set; }
}
public void Issue253_TestIEnumerableTypeHandlerParsing()
{
Dapper.SqlMapper.ResetTypeHandlers();
Dapper.SqlMapper.AddTypeHandler(StringListTypeHandler.Default);
var foo = connection.Query<MyObjectWithStringList>("SELECT 'Sam,Kyro' AS Names").Single();
foo.Names.IsSequenceEqualTo(new[] { "Sam", "Kyro" });
}
public void Issue253_TestIEnumerableTypeHandlerSetParameterValue()
{
Dapper.SqlMapper.ResetTypeHandlers();
Dapper.SqlMapper.AddTypeHandler(StringListTypeHandler.Default);
connection.Execute("CREATE TABLE #Issue253 (Names VARCHAR(50) NOT NULL);");
try
{
String names = "Sam,Kyro";
List<String> names_list = names.Split(',').ToList();
var foo = connection.Query<String>("INSERT INTO #Issue253 (Names) VALUES (@Names); SELECT Names FROM #Issue253;", new { Names = names_list }).Single();
foo.IsEqualTo(names);
}
finally
{
connection.Execute("DROP TABLE #Issue253;");
}
}
public void Issue130_IConvertible()
{
dynamic row = connection.Query("select 1 as [a], '2' as [b]").Single();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册