c# – Dapper.NET多映射TSecond Deserializer为null
发布时间:2020-12-15 17:20:40 所属栏目:百科 来源:网络整理
导读:我正在尝试使用Dapper执行非常标准的多映射查询,我收到以下错误.当这似乎有效时,我偶尔会得到另一个错误,但我现在无法重现它.如果/第一个问题解决了,我会将它附加到这篇文章中. 这是查询代码: const string storedProc = "dbo.GetStopsForRouteID"; var sto
我正在尝试使用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); 在第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 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的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上分裂). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |