Dapper.NET多映射TSecond Deserializer為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);

在第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分裂)。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因