Dapper는 저장 프로 시저를 호출하고 결과를 클래스에 매핑합니다.

c# dapper sql-server stored-procedures

문제

T-SQL 저장 프로 시저가 있습니다.

CREATE PROCEDURE [dbo].[GetRequestTest] 
        @RequestId UNIQUEIDENTIFIER
AS
BEGIN
    SELECT 
        Request.Amount,
        Request.Checksum 
    FROM 
        Request 
    WHERE
        RequestId = @RequestId
END

C # 매핑 클래스 :

public class CustomTest : Itest
{
    public decimal Amount {get;set;}
    public string Checksum { get; set; }
}

Dapper를 사용하여 저장 프로 시저를 호출하려고합니다.

public void Load(CustomTest obj, Guid RequestId)
{
    using (var con = base.GetClosedConnection())
    {
        con.Open();

        var p = new DynamicParameters();
        p.Add("@RequestId", dbType: DbType.Guid, direction: ParameterDirection.Input);               

        var result = con.ExecuteReader("[dbo].[GetRequestTest]", param: p, commandType: CommandType.StoredProcedure);

        while (result.Read())
             obj.Amount = (decimal)result["Amount"];
    }            
}

그러나 결과는 null입니다.

저장 프로 시저의 SQL 문을 C # 코드에 직접 저장하려고했는데 제대로 작동하지만 저장 프로 시저에서는 작동하지 않습니다.

어떤 아이디어 - 어떻게 작동 시키는가?

수락 된 답변

잘못된 방법을 호출합니다.

public void Load(CustomTest obj, Guid RequestId)
{
    using (var con = base.GetClosedConnection())
    {
        con.Open();                

        //result is list of CustomTest
        var result = db.Query<CustomTest>("GetRequestTest", new {RequestId},
                         commandType: CommandType.StoredProcedure);
    }            
}

dapper 사용 방법 : https://github.com/StackExchange/dapper-dot-net


인기 답변

using (var con = base.GetClosedConnection())
{
    var result = conn.Query<CustomTest>("exec [dbo].[GetRequestTest] @id", new {Id = RequestId});
}

저장 프로 시저 또는 쿼리 반환 값은 CustomTest의 속성 이름 (예 : Amount, Checksum)과 같아야합니다. 결과적으로 적절한 데이터로 채워진 IEnumerable을 받게됩니다.



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