2016-08-08 14 views
1

テンプレートオブジェクトからDynamicParamtersを作成すると、Dapperを使用して出力パラメータをオブジェクトに適切にマップする方法に苦労しています。.NETコアのDapperで出力パラメータを返す

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() 

非常に基本的な挿入SPROCをである私のDynamicParametersのためのオブジェクト・テンプレートを使用しようとすると、バックDapperの出力パラメータを取得するための正しい方法は何ですか?

答えて

0

これを見て、テンプレートからパラメータに移動したときにコードが正しく更新されませんでした。 parametersではなく、entityをクエリに渡していました。私がそれを置き換えると、出力パラメータIdの明示的な追加を取り除くことさえできました。これははるかにいいです!

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

await conn.ExecuteAsync(
    "TodoItemInsert", parameters, 
    commandType: CommandType.StoredProcedure); 
関連する問題