Dapper를 사용하여 여러 속성을 단일 속성에 매핑

c# dapper

문제

나는 장소에서 약간 일관성이없는 데이터베이스로 작업하고 있습니다. 예를 들어, 기본적으로 정확한 결과 집합 구조를 반환하는 두 개의 저장 프로 시저가 있지만 어떤 이유로 든 DBA는 첫 번째 필드의 이름을 다른 것의 이름과 다르게 지정합니다. 이 데이터를 캡슐화하기 위해 두 개의 개별 모델을 생성하고 싶지 않습니다.

Dapper를 설정하여 두 결과 세트를 동일한 객체에 매핑 할 수 있습니까?

예를 들어 sp_GetSomeDataByQtr 은 다음과 같은 결과 집합을 반환합니다.

Qtr int,
Lines int,
Balance money

반면 sp_GetSomeDataByMonth 는 다음과 같은 결과 집합을 반환합니다.

Mo int,
Lines int,
Balance money

나는이 두 가지를 다음과 같은 객체에 캡슐화하고 싶다.

public class MyData {
    public int Term { get; set; } //This would be Qtr OR Mo depending on which SP is called.
    public int Lines { get; set; }
    public decimal Balance { get; set; }
}

그렇다면 Dapper와 함께 :

MyData data = connection.Query<MyData>("sp_GetSomeDataByQtr", ...).FirstOrDefault();

또는:

MyData data = connection.Query<MyData>("sp_GetSomeDataByMonth", ...).FirstOrDefault();

저장 프로 시저를 직접 변경할 수는 없습니다. 기존 응용 프로그램에서도 데이터를 검색하고 이러한 열 이름에 따라 저장 프로 시저가 직접 변경되기 때문입니다.

Dapper와 함께 할 수있는 방법이 있습니까? 사용자 정의 유형 맵을 설정할 수 있지만 여러 개의 열 이름을 객체의 단일 속성에 매핑하려고 할 때 어떻게해야할지 모르겠습니다.

수락 된 답변

아래 라인을 따라 무엇인가? Dapper는 저장 프로 시저에 따라 Mo 또는 Lines를 채우지 만 Term 속성에서 항상 값을 읽을 수 있습니다.

public class MyData
{
    public int? Mo { get; set; }
    public int? Lines { get; set; }
    public decimal Balance { get; set; }

    public int Term
    {
        get
        {
            if (Mo == null && Lines != null)
            {
                return Lines.Value;
            }
            if (Mo != null && Lines == null)
            {
                return Mo.Value;
            }

            return default(int);
        }
    }
}


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