4
我試圖用Dapper執行一個非常標準的多映射查詢,並且出現以下錯誤。我似乎也偶爾會遇到另一個錯誤,但目前我無法重現。如果/當第一個問題解決時,我會將其附加到此帖子。Dapper.NET多映射TSecond Deserializer爲null
下面是該查詢的代碼:
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
我已經在短小精悍的代碼廣泛的樣子,但我無法找到任何東西,似乎出比T第一的解串器ISN」其他地方t null,但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是什麼,但找不到任何文檔或對它的直接解釋。 – George
@喬治,這是公平的批評;實際上,在'Query <,,>'上它聲明'我們應該分割並讀取第二個對象的字段(默認:id)',但是該註釋在其他地方沒有被複制 –
花費了3個小時在那一個,我敢肯定,如果谷歌代碼頁更新,很多人會感激:) – George