Dapper QueryMultiple이 결과를 반환했는지 확인하는 방법

.net c# dapper

문제

선택적 매개 변수를 사용하는 저장소 메서드가 있는데 레코드를 반환하거나 반환하지 않을 수 있습니다. 쿼리가 레코드를 반환하면 모든 것이 정상적으로 작동하지만 결과가없는 경우 Dapper 내에 예외가 발생합니다. 읽으려고 시도하기 전에 반환 된 결과 집합이 있는지 여부를 확인할 수 있도록 연결 또는 다중 메서드가 나타나지 않습니다. 이 일을 할 수있는 방법이 있습니까? 아니면 여기에 비논리적 인 일을하고 있습니까?

    public ICustomer GetCustomer(int? custId = null, string email = null, string phoneNumber = null)
    {
        using (var connection = GetConnection())
        {
            using (var multi = connection.QueryMultiple("BusinessEntity.usp_Customer_GetCustomer", 
            new { CustId = custId, Email = email, Phone = phoneNumber },
            commandType: CommandType.StoredProcedure))
            {
   Exception -> var customer = multi.Read<Customer>().SingleOrDefault();

                //customer.Address = multi.Read<Address>() as IList<IAddress>;
                //customer.Phone = multi.Read<Phone>() as IList<IPhone>;

                return customer;
            }
        }
    }

예외는

선택한 열이 없습니다.

        if (reader.FieldCount <= startBound)
        {
            throw MultiMapException(reader);
        }

인기 답변

이것은 실제로 내 저장 프로 시저의 논리에 결함이 있습니다. 조건부로 고객 ID에 대한 이전 쿼리를 기반으로 실제로 다중 선택을 수행 한 부분을 건너 뛰었습니다.

ALTER PROCEDURE [BusinessEntity].[usp_Customer_GetCustomer]
   @CustId INT = NULL,
   @Email  VARCHAR(100) = NULL,
   @Phone  VARCHAR(100) = NULL
AS
 BEGIN TRAN;
 IF @CustId IS NULL
     BEGIN
         SELECT @CustId = c.CustomerId
        ...
     END;
         IF @@ROWCOUNT > 1 AND @Cust IS NOT NULL --Wrong
         IF @CustId IS NULL @CustId = 0 --Sort of correct
             BEGIN
                 SELECT ...
                 SELECT ...
                 SELECT ...
             END;
                 COMMIT;
                 RETURN 0;


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