Dapper和用户定义的数据库类型

时间:2017-02-14 08:17:16

标签: c# asp.net sql-server dapper

假设我在数据库中有一个用户定义的数据类型: MySuperType作为其中的两个bigint属性(Id + Code)

我有一个存储过程,它接受这些参数:

@MySuperType, @Price, @dateModified, etc...

现在在我的代码中,我正在使用这样的Dapper:

using (var connecion = new SqlConnection(_connectionString))
{
    result = connection.Execute("SP_name", 
                new {mySuperType, price, date}, 
                commandType: CommandType.StoredProcedure);
}

但我一直收到错误

  

类型操作数冲突:Dapper无法将用户定义的类型:MySuperType从参数映射到存储过程。

更改存储过程或替换用户定义的类型不是一个选项

有没有人知道如何映射类型并将参数(所有这些)发送到存储过程?

1 个答案:

答案 0 :(得分:1)

参数名称必须与过程中定义的参数相对应:

using (var connecion = new SqlConnection(_connectionString))
        {
            result = connection.Execute("SP_name", 
                new {MySuperType = mySuperType, Price = price, dateModified = date}, 
                commandType: CommandType.StoredProcedure);
        }

Dapper在两个方向上的映射(作为参数和结果)区分大小写。

如果您想避免指定参数的名称,请确保在c#和存储过程中的变量中完全相同。