Dapper.NET 다중 매핑 TSecond 디시리얼라이저가 null입니다.

c# dapper mapping multi-mapping

문제

Dapper를 사용하여 매우 표준적인 다중 매핑 쿼리를 수행하려고하는데 다음 오류가 발생합니다. 가끔씩 다른 오류가 발생하는 경우도 있지만 지금은 재현 할 수 없습니다. 첫 번째 문제가 해결되면이 게시물에 추가하겠습니다.

다음은 쿼리 코드입니다.

        const string storedProc = "dbo.GetStopsForRouteID";

        var stops = conn.Query<RouteStop, MapLocation, RouteStop>(
           storedProc, (stop, loc) =>
        {
            stop.Location = loc;
            return stop;
        }, new { RouteID = routeId }, commandType: CommandType.StoredProcedure);

Dapper.cs의 498 행 :

var deserializer2 = (Func<IDataReader, TSecond>)info.OtherDeserializers[0];

info.OtherDeserializers는 null이므로 NullReferenceException이 발생합니다.

이것은 저장 프로 시저의 내장입니다.

SELECT 
    RouteStops.StopID, 
    RouteStops.Name, 
    RouteStops.Description, 
    RouteStops.IsInbound, 
    RouteStops.Location.Lat as Latitude, 
    RouteStops.Location.Long as Longitude
FROM dbo.Routes

INNER JOIN dbo.StopsOnRoute ON
Routes.RouteID = StopsOnRoute.RouteID

INNER JOIN dbo.RouteStops ON
StopsOnRoute.StopID = RouteStops.StopID

WHERE Routes.RouteID = @RouteID
ORDER BY StopsOnRoute.SequenceNumber

나는 진부한 코드를 광범위하게 살펴 봤지만 TFirst의 deserialiser가 null이 아니지만 TS 초가 아닌 것으로 보이는 부분을 찾을 수 없습니다. null로 남겨 두는 TSecond의 디시리얼라이저를 생성 할 때 문제가 발생할 수 있습니까?

유형은 다음과 같습니다.

public class MapLocation
{
    public double Latitude { get; set; }
    public double Longitude { get; set; }
}

public class RouteStop {
    public int StopID { get; set; }

    public string Name { get; set; }
    public string Description { get; set; }
    public bool IsInbound { get; set; }

    public MapLocation Location { get; set; }
}

수락 된 답변

아마도 여기에서 가장 중요한 문제는 "분할"하는 방법을 알려주지 않았다는 것입니다. 매개 변수를 추가하십시오.

splitOn: "Latitude"

그것 없이는, dapper 가 두 번째 결과 부분이 없다는 것을 볼 수 있다 . (기본적으로 Id 는 분리되어있다.)



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