Azure SQL 데이터베이스 : Dapper를 사용하여 저장 프로 시저를 호출 할 때 "선택한 열이 없습니다"

azure azure-sql-database dapper stored-procedures

문제

Azure SQL 데이터베이스에 정말 간단한 저장 프로 시저가 있습니다.

CREATE PROCEDURE dbo.spfindPartialIdentity 
    @ClientId nvarchar(50),
    @ExternalId nvarchar(250)
AS BEGIN
   SET NOCOUNT ON;

   SELECT 
       ClientId, ExternalId 
   FROM 
       [dbo].[PartialIdentities] 
   WHERE 
       ClientId = @ClientId AND ExternalId = @ExternalId
END

내 저장소에서 Dapper를 사용하여 호출합니다.

using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ReportingDB"].ConnectionString))
{
    await conn.OpenAsync();
    var res = await conn.QueryAsync<PartialIdentity>("dbo.spfindPartialIdentity", 
                                                      new { ClientId = clientId, ExternalId = externalId }, 
                                                      commandType: CommandType.StoredProcedure, 
                                                      commandTimeout: GetCommandTimeout());

    return res.ToList();
}

정말 간단합니다. 나는 잘 작동하지만 저장 프로 시저가 결과를 반환하지 않을 때

'System.InvalidOperationException'Dapper.dll에서 "열이 선택되지 않았습니다."

QueryAsync() 호출 할 때 예외가 발생합니다. 내 DTO는 정말 간단합니다.

public class PartialIdentity
{
    public PartialIdentity(string clientId, string externalId)
    {
        this.ClientId = clientId;
        this.ExternalId = externalId;
    }

    public string ClientId { get; set; }
    public string ExternalId { get; set; }
}

나는 QueryMultipleAsync() 도 시도했다. 같은 결과이다.

문제가 무엇입니까? 미리 감사드립니다.

수락 된 답변

내 SP에서 버그가있는 것으로 밝혀졌습니다. Dapper 코드는 괜찮 았습니다. SP는 실제로 좀 더 복잡하고 (IF-THEN-ELSE가 중첩되어 있음) 조건을 만족하는 레코드가 없으면 아무것도 반환하지 않았고 불쌍한 Dapper는이를 반환하는 방법을 알지 못했습니다. DTO - 따라서 예외. 이런! 바보 나! 다른 사람이 비슷한 경우를 대비하여 문서화하십시오.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow