Dapper.NET multi mapping TSecond Deserializer es nulo

c# dapper mapping multi-mapping

Pregunta

Estoy tratando de realizar una consulta de mapeo múltiple muy estándar utilizando Dapper, y me aparece el siguiente error. También recibo otro error ocasionalmente cuando parece que funciona, pero no puedo reproducirlo en este momento. Lo anexaré a esta publicación si / cuando se resuelve el primer problema.

Aquí está el código de consulta:

        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);

En Dapper.cs en la línea 498:

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

info.OtherDeserializers es nulo, lo que causa una NullReferenceException.

Estas son las agallas del procedimiento almacenado:

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

He echado un vistazo extenso al código de dapper, pero no puedo encontrar nada que parezca fuera de lugar, aparte de que el deserializador de TFirst no es nulo, pero TSecond sí lo es. ¿Podría haber un problema cuando crea el deserializador de TSecond que lo deja como nulo?

Aquí están los tipos:

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; }
}

Respuesta aceptada

Probablemente el principal problema aquí es que no le has dicho cómo "dividir"; intente agregar el parámetro:

splitOn: "Latitude"

sin eso, por lo que Dapper puede ver, no hay una segunda porción de resultados (se divide en Id de manera predeterminada).



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué