Sto verificando la v1.25 di Dapper con Sqlite tramite System.Data.Sqlite. Se corro questa query:Conversione intero Dapper e verso il basso
var rowCount = dbc.Query<int>("SELECT COUNT(*) AS RowCount FROM Data").Single();
ottengo il seguente errore: System.InvalidCastException: Specified cast is not valid
Questo perché Sqlite restituisce il valore di cui sopra come un Int64, che posso verificare con il seguente codice. Questo getterà "Int64":
var row = dbc.Query("SELECT COUNT(*) AS RowCount FROM Data").Single();
Type t = row.RowCount.GetType();
throw new System.Exception(t.FullName);
Ora, il seguente codice sarà effettivamente gestire la conversione verso il basso da Int64 a 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());
Quando mi passi questa eccezione, mi dà il conteggio effettivo fila , indicando che Dapper ha gestito la conversione per me.
La mia domanda è, perché è che dbc.Query<int>
non gestisce la conversione verso il basso in modo simile a dbc.Query<QuerySummary>
? È questo comportamento previsto?
Marc, molte grazie per aver parlato così rapidamente. Ho controllato NuGet ma non sembra che sia ancora disponibile. Lo prenderò di Github più tardi oggi se avrò tempo per provarlo. Inoltre, sono felice di segnalare che un problema relativo alla conversione da Int64 a Int32 nullable esistente in 1.13 è andato in 1,25. Grandi cose. – John
Solo un breve resoconto, ho scaricato la build più recente da Github e l'ho testata in un paio di scenari con cui ho lavorato. Ha funzionato perfettamente, senza eccezioni. Grazie ancora. – John
@John bene a sentire, grazie –