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
dapper コードを詳しく調べましたが、TFirst のデシリアライザーが null ではなく、TSecond のデシリアライザーが null であること以外に、場違いに見えるものは見つかりません。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; }
}