使用Dapper为.NET Core返回输出参数

7

我正在苦恼如何使用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获取输出参数呢?

1个回答

13

我明白了,之前我将代码从模板移植到参数时没正确更新代码。 我当时把entity传递到查询中,而不是parameters。 一旦更改后,我甚至可以摆脱对Id输出参数的显式添加了。 这样做的效果要好得多!

var parameters = new DynamicParameters(entity);
parameters.Output(entity, x => x.Id);             

await conn.ExecuteAsync(
   "TodoItemInsert", parameters, 
    commandType: CommandType.StoredProcedure);  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接