如果我有一个自定义类型(在我的情况下是-inf
类),那么在设置存储过程参数时Dapper是否可以自动处理类型转换?此刻,我必须这样做:
+inf
我真的必须将其转换为更公认的系统类型吗?我希望Dapper的Date
代码可以工作,但是似乎忽略了它,因此我假设它仅用于检索数据时的投影,而不用于参数化命令。
这是在.NET Framework 4.7.2上使用Dapper 1.60.0
答案 0 :(得分:1)
是的,Dapper确实支持对存储过程参数的类型进行自定义处理。这是一个自定义Date
类的转换示例:
// only required once per app-domain, unless SqlMapper.ResetTypeHandlers() is called
SqlMapper.AddTypeHandler(typeof(Date), new DateHandler());
DynamicParameters parameters = new DynamicParameters();
parameters.Add("MyDate", new Date() { MyDate = DateTime.Today });
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
connection.Execute(
sql: "dbo.InsertDate",
param: parameters,
commandType: CommandType.StoredProcedure);
}
这里是处理给予SqlMapper.AddTypeHandler
的转换的类。对于设置存储过程参数,请使用SetValue
。
public class DateHandler : ITypeHandler
{
public object Parse(Type destinationType, object value)
{
return new Date() { MyDate = (DateTime)value };
}
public void SetValue(IDbDataParameter parameter, object value)
{
parameter.DbType = DbType.Date;
parameter.Value = ((Date)value).MyDate;
}
}
为了完整起见,这是需要自定义处理的自定义类。
public class Date
{
public DateTime MyDate { get; set; }
}