Dapper.NET multi mapping TSecond Deserializer является нулевым

Я пытаюсь выполнить очень стандартный запрос многократного отображения, используя 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.OtherDeserializer имеет значение 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, который не равен нулю, а TSecond. Может ли быть проблема, когда он создает десериализатор 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; }
}

1 ответ

Решение

Вероятно, главная проблема здесь в том, что вы не сказали, как "разделить"; попробуйте добавить параметр:

splitOn: "Latitude"

без этого, насколько может видеть dapper, нет второй части результата (она разбивается на Id по умолчанию).

Другие вопросы по тегам