不允许从数据类型 sql_variant 到 varchar 的隐式转换
Implicit conversion from data type sql_variant to varchar is not allowed
使用 Dapper 从 .NET Entity Framework 调用存储过程时出现此错误。
Implicit conversion from data type sql_variant to varchar is not allowed.
存储过程参数为@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
Dapper 在内部将 object
映射到 sql_variant
。当我通过 null
时,它被认为是 object
类型。由于我的 存储过程 期望 varchar
,sql_variant
无法转换为它。
我开始传递 string.Empty
而不是 null
对象,它工作正常。
@Name = Request.Name??string.Empty;
对我来说,问题是我使用 Visual Studio 的 'Paste Special'->'Paste JSON as classes' 自动生成了我的 DTO class,并且它为一些成员设置了数据类型作为对象而不是字符串。
使用 Dapper 从 .NET Entity Framework 调用存储过程时出现此错误。
Implicit conversion from data type sql_variant to varchar is not allowed.
存储过程参数为@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
Dapper 在内部将 object
映射到 sql_variant
。当我通过 null
时,它被认为是 object
类型。由于我的 存储过程 期望 varchar
,sql_variant
无法转换为它。
我开始传递 string.Empty
而不是 null
对象,它工作正常。
@Name = Request.Name??string.Empty;
对我来说,问题是我使用 Visual Studio 的 'Paste Special'->'Paste JSON as classes' 自动生成了我的 DTO class,并且它为一些成员设置了数据类型作为对象而不是字符串。