使用Dapper从.NET实体框架调用存储过程时,出现此错误。
不允许从sql_variant数据类型到varchar的隐式转换。
存储过程参数为@Name nvarchar(50) = NULL
。
因此,理想情况下,它应该接受一个空值。当我调用存储过程并从.NET传递@Name = null
时,出现此错误。
这是存储过程:
CREATE PROCEDURE [dbo].[Member_Add]
@Id NVARCHAR(50) = NULL,
@Name NVARCHAR(50) = NULL
AS
BEGIN
INSERT INTO [dbo].Member (Id, Name)
VALUES (@Id, @Name)
END
答案 0 :(得分:6)
Dapper正在内部将object
映射到sql_variant
。当我通过null
时,它正在将其视为object
类型。由于我的存储过程期望varchar
,所以sql_variant
不能转换为它。
我开始传递string.Empty
而不是null
对象,它运行正常。
@Name = Request.Name??string.Empty;