这是查询代码:
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);
在第498行的Dapper.cs中:
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 LongitudeFROM dbo.RoutesINNER JOIN dbo.StopsOnRoute ONRoutes.RouteID = StopsOnRoute.RouteIDINNER JOIN dbo.RouteStops ONStopsOnRoute.StopID = RouteStops.StopIDWHERE Routes.RouteID = @RouteIDORDER BY StopsOnRoute.SequenceNumber
我已经对dapper代码进行了广泛的研究,但除了TFirst的deserialiser不是null之外我找不到任何看似不合适的东西,但是TSecond是.当它创建TSecond的反序列化器并将其保留为null时会出现问题吗?
以下是类型:
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可以看到没有第二个结果部分(默认情况下它在ID上分裂).
总结以上是内存溢出为你收集整理的c# – Dapper.NET多映射TSecond Deserializer为null全部内容,希望文章能够帮你解决c# – Dapper.NET多映射TSecond Deserializer为null所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)