Dapper.NETマルチマッピングTS秒デシリアライザは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のデシリアライザが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が第2の結果部分を見ることができない限り(デフォルトではIdに分割されます)。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ