Dapper.NET multi mapping TSecond Deserializer est nul

c# dapper mapping multi-mapping

Question

J'essaie d'effectuer une requête multi-mappage très standard à l'aide de Dapper et j'obtiens l'erreur suivante. Je reçois aussi une autre erreur de temps en temps lorsque cela semble fonctionner, mais je ne peux pas le reproduire pour le moment. Je l'ajouterai à ce post si / quand le premier problème est résolu.

Voici le code de la requête:

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

Dans Dapper.cs sur la ligne 498:

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

info.OtherDeserializers est null, ce qui provoque une exception NullReferenceException.

Voici les entrailles de la procédure stockée:

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

J'ai examiné attentivement le code Dapper, mais je ne trouve rien d'autre qui semble déplacé, à part que le désérialiseur de TFirst n'est pas nul, mais que TSecond l'est. Peut-il y avoir un problème quand il crée le désérialiseur de TSecond qui le laisse comme null?

Voici les types:

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

Réponse acceptée

Le problème principal est probablement que vous ne lui avez pas dit comment "se séparer"; essayez d'ajouter le paramètre:

splitOn: "Latitude"

sans cela, pour autant que Dapper puisse voir, il n'y a pas de seconde partie de résultat (elle se divise par défaut sur Id ).




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi