2016-08-08 58 views
1

Ich habe Probleme damit, Ausgabeparameter mit Hilfe von Dapper korrekt einem Objekt zuzuordnen, wenn ich DynamicParamters aus einem Vorlagenobjekt erstelle.Zurückgeben von Ausgabeparametern mit Dapper für .NET Core

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

Meine Hoffnung war, dass der obige Code die resultierende ID zurück in die Einheit Karte würde, die ich von in erster Linie die Parameter erstellt. Egal, was ich versuche, ich kann den Parameter nicht von der gespeicherten Prozedur zurückgeben. Aufruf parameters.Get<int>("@Id") wirft eine KeyNotFoundException. parameters.Get<int?>("@Id") gibt null zurück.

My SQL ist eine sehr grundlegende Einsatz sproc

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

Was ist der richtige Weg, um einen Ausgabeparameter zurück von Dapper zu erhalten, wenn sie versuchen, ein Objekt Vorlage für meine DynamicParameters zu benutzen?

Antwort

0

Das herausgefunden, nicht richtig meinen Code aktualisiert, wenn ich von der Vorlage zu den Parametern wechselte. Ich übermittelte entity in meine Abfrage, nicht parameters. Sobald ich das ersetzte, konnte ich sogar den ausdrücklichen Zusatz des Id Ausgangsparameters loswerden. Das ist viel schöner!

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

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