我正在苦恼如何使用Dapper将输出参数正确地映射回一个对象,当我从模板对象创建DynamicParameters
时。
var parameters = new DynamicParameters(entity);
parameters.Add("@Id", dbType: DbType.Int32, direction: ParameterDirection.Output);
parameters.Output(entity, x => x.Id);
await conn.ExecuteAsync(
"TodoItemInsert", entity,
commandType: CommandType.StoredProcedure);
我希望上述代码能够将结果ID映射回我最初创建参数的实体。无论我尝试什么,都无法从存储过程中获取参数。调用parameters.Get<int>("@Id")
会抛出KeyNotFoundException
异常。parameters.Get<int?>("@Id")
返回null。
我的SQL是一个非常基本的插入存储过程。
ALTER PROCEDURE [dbo].[TodoItemInsert]
@Name VARCHAR(255)
, @Description VARCHAR(512)
, @DueDate DATETIME = NULL
, @IsComplete BIT = 0
, @Id INT OUTPUT
AS
INSERT INTO
[TodoItems]
(
Name
, Description
, DueDate
, IsComplete
)
VALUES
(
@Name
, @Description
, @DueDate
, @IsComplete
)
SET @Id = SCOPE_IDENTITY()
当使用对象模板来对我的DynamicParameters
进行操作时,正确的方法是如何从Dapper获取输出参数呢?