C# Dapper是否支持存储过程参数的自定义类型?
如果我有一个自定义类型,一个日期类,那么在设置存储过程参数时,Dapper是否可以自动处理类型转换?目前,我必须这样做:C# Dapper是否支持存储过程参数的自定义类型?,c#,dapper,C#,Dapper,如果我有一个自定义类型,一个日期类,那么在设置存储过程参数时,Dapper是否可以自动处理类型转换?目前,我必须这样做: public void Execute(Date value) { var parameters = new DynamicParameters(); parameters.Add("MyDate", Date.ToDateTime(), DbType.Date); Execute("dbo.InsertDate", parameters, Comma
public void Execute(Date value)
{
var parameters = new DynamicParameters();
parameters.Add("MyDate", Date.ToDateTime(), DbType.Date);
Execute("dbo.InsertDate", parameters, CommandType.StoredProcedure);
}
我真的必须把它转换成一种更受认可的系统类型吗?我希望Dapper的TypeHandler代码能够工作,但它似乎忽略了它,所以我假设它只是用于在检索数据时处理投影,而不是用于参数化命令
这是在.NET Framework 4.7.2上使用Dapper 1.60.0是的,Dapper支持对存储过程参数的类型进行自定义处理。下面是一个转换自定义日期类的工作示例: 下面是处理给定给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; }
}
请显示TypeHandler代码。嗯,看起来我已经得到了所有这些,除了在设置parameter.value时将值转换为最新值
public class Date
{
public DateTime MyDate { get; set; }
}