Mam następujące zapytanie:Dlaczego dapper zwraca każdą kolumnę numeru jako Int64?
SELECT
[Person].[Id] AS [Person_Id],
[Person].[Name] AS [Person_Name],
[Address].[Id] AS [Address_Id],
[Address].[Number] AS [Address_Number],
[Address].[Street] AS [Address_Street],
FROM [Person]
LEFT JOIN [Address] ON [Person].[addressId] = [Address].[Id]
który służy do kwerendy SQLite
DB w pamięci jako:
var rows = _database.Query(query);
Jednak gdy próbuję odczytać wartości jako Int32
mam InvalidCastException
.
foreach (IDictionary<string, object> row in rows)
{
var someId = (int)row["Person_Id"];
var someNumber = (int)row["Address_Number"];
}
Powodem Używam dapper
jak tak jest, że jako poboczny projekt buduję niektóre funkcje na górze dapper
do mapowania wartości do POCO
(Jestem świadomy podobnych projektów np rainbow
, dapper.extensions
itp).
Więc coś wzdłuż linii:
var rowVal = row[fieldName];
propInfo.SetValue(obj, rowVal, null);
Znowu ignorować kosztów wydajności związanej z wezwaniem refleksji.
W powyższym przykładzie typ właściwości POCO
to int32
. Z tego powodu nie mogę przypisać tej wartości do obj
.
Każda pomoc lub pomysły są bardzo doceniane.
Z jakich RDBMS korzystasz? Nie jest to wyzywające. Jednak niektóre RDBMS * robią to wewnętrznie * (co oznacza: eksponują liczby całkowite jako Int64). Chcę winić mysql, ale nie pamiętam, kto to robi. Zasadniczo, jeśli użyjesz 'Query' * z ostatnimi kompilacjami *, powinno to obejść automatycznie. Mam nadzieję, że zadziała to również przy użyciu 'dynamicznego' API. Jeśli jednak korzystasz z surowego interfejsu unbox API (takiego, jaki jesteś), ** potrzebujesz **, aby rozpakować do typu rzeczywistych danych - to wbudowane ograniczenie działania rozpakowywania w C#. –
Witaj Marc, dzięki za komentarz, używam 'SQLite' i starej wersji' Dapper', przełączę się na najnowszą i zgłoś się. – MaYaN
uwaga: jeśli nadal będziesz używać 'IDictionary' API, spodziewałbym się, że będzie on dalej działał - w tym momencie po prostu rozpakowujesz i trzeba rozpakować do odpowiedniego typu (ish, są wyjątki) –