.NET 코어 용 Dapper로 출력 매개 변수 반환

.net-core dapper

문제

템플릿 객체에서 DynamicParamters 를 만들면 출력 매개 변수를 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은 매우 기본적인 삽입 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()

DynamicParameters 객체 템플릿을 사용하려고하면 Dapper에서 출력 매개 변수를 다시 가져 오는 올바른 방법은 무엇입니까?

수락 된 답변

템플릿을 매개 변수로 옮길 때 코드를 제대로 업데이트하지 못했습니다. entity 를 쿼리가 아닌 parameters 로 전달했습니다. 일단 내가 바꾼 경우에는 Id 출력 매개 변수를 명시 적으로 추가 할 수 있습니다. 이것은 훨씬 좋네요!

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

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


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.