Dapper是否支持存储过程参数上的自定义类型?

时间:2019-05-30 12:06:02

标签: c# dapper

如果我有一个自定义类型(在我的情况下是-inf类),那么在设置存储过程参数时Dapper是否可以自动处理类型转换?此刻,我必须这样做:

+inf

我真的必须将其转换为更公认的系统类型吗?我希望Dapper的Date代码可以工作,但是似乎忽略了它,因此我假设它仅用于检索数据时的投影,而不用于参数化命令。

这是在.NET Framework 4.7.2上使用Dapper 1.60.0

1 个答案:

答案 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; }
}