Sprawdzam v1.25 z Dapper z Sqlite za pośrednictwem System.Data.Sqlite. Jeśli mogę uruchomić tej kwerendy:Konwersja Dapper i Downward Integer
var rowCount = dbc.Query<int>("SELECT COUNT(*) AS RowCount FROM Data").Single();
pojawia się następujący błąd: System.InvalidCastException: Specified cast is not valid
To dlatego Sqlite zwraca powyższą wartość jako Int64, które można zweryfikować za pomocą następującego kodu. To rzucać „Int64”:
var row = dbc.Query("SELECT COUNT(*) AS RowCount FROM Data").Single();
Type t = row.RowCount.GetType();
throw new System.Exception(t.FullName);
Teraz poniższy kod będzie faktycznie obsługiwać konwersję w dół z Int64 do Int32:
public class QuerySummary
{
public int RecordCount { get; set; }
}
var qs = dbc.Query<QuerySummary>("SELECT COUNT(*) AS RecordCount FROM Data").Single();
rowCount = qs.RecordCount;
throw new System.Exception(rowCount.ToString());
Kiedy rzucam ten wyjątek, to daje mi rzeczywistą liczbę wierszy , wskazując, że Dapper zajął się dla mnie nawróceniem.
Moje pytanie brzmi: dlaczego to dbc.Query<int>
nie obsługuje konwersji w dół w sposób podobny do dbc.Query<QuerySummary>
? Czy to zamierzone zachowanie?
Marc, wielkie dzięki za tak szybkie rozpatrzenie. Sprawdziłem NuGet, ale nie wygląda na to, że jest jeszcze dostępny. Wezmę to później z Githuba, jeśli znajdę trochę czasu, żeby to przetestować. Ponadto, z przyjemnością informuję, że problem z konwersją wartości pustej Int64 na Int32 istniejącej w wersji 1.13 zniknął w wersji 1.25. Świetna sprawa. – John
Po krótkim raporcie pobrałem najnowszą kompilację z Github i przetestowałem ją w kilku scenariuszach, z którymi współpracowałem. Działało idealnie, żadnych wyjątków. Dzięki jeszcze raz. – John
@John dobrze słyszeć, dzięki –