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