不允许从数据类型 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 类型。由于我的 存储过程 期望 varcharsql_variant 无法转换为它。

我开始传递 string.Empty 而不是 null 对象,它工作正常。

@Name = Request.Name??string.Empty;

对我来说,问题是我使用 Visual Studio 的 'Paste Special'->'Paste JSON as classes' 自动生成了我的 DTO class,并且它为一些成员设置了数据类型作为对象而不是字符串。