gpt4 book ai didi

c# - Dapper.NET 多映射 TSecond Deserializer 为空

转载 作者:行者123 更新时间:2023-11-30 12:34:13 25 4
gpt4 key购买 nike

我正在尝试使用 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 的反序列化器不为空而 TSecond 为空之外,我找不到任何看起来不合适的地方。当它创建将其保留为空的 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 而言,没有第二个结果部分(默认情况下它在 Id 上拆分)。

关于c# - Dapper.NET 多映射 TSecond Deserializer 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7656983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com