2016-03-27 9 views
0

Ich verwende Dapper, SQLite auf C# coreclr.Dapper löst die Ausnahme aus, wenn Sie zum zweiten Mal eine Abfrage ausführen, wenn das Schema für verschiedene Ergebnisse

public async Task<UserPoco> GetFromEmail(string email) 
    { 
     email = email.ToLower(); 

     using (var connection = new SqliteConnection(_configSettings.ConnectionString)) 
     { 
      connection.Open(); 
      var query = $"SELECT * FROM users WHERE EmailAddress = '{email}';"; 
      var result = await connection.QueryAsync<UserPoco>(query); 
      return result.FirstOrDefault(); 
     } 
    } 

Diese einfache Methode löst eine Ausnahme aus, wenn die SQL-Abfrage zu irgendeinem Zeitpunkt keine Ergebnisse findet und das nächste Mal, wenn sie ausgeführt wird, Ergebnisse findet. Es wirft: Kann nicht Objekt des Typs "System.Int64" zu "System.Int32" eingeben. Fehler Parsing Spalte 0 (UserId = 86 - Int64)

Ich bin ziemlich sicher, dass es nicht mit den Datentypen verwandt ist. Das UserPoco hat eine lange UserId-Eigenschaft und die Benutzer der DB-Tabelle haben eine UserId vom Typ INTEGER, die empfohlen wird, bigint (long) zu speichern. Wenn zum Beispiel die Methode immer Daten findet, wird es wie ein Zauber wirken. Ich glaube an die Tatsache, dass Dapper das Ergebnis Schema jeder Abfrage-Caches es läuft und löst eine Ausnahme, wenn diese Schemaänderungen für die gleiche Abfrage, wie sie auf weisen: https://github.com/janjosephlim/dapper-dot-net/issues/124

Was ich nicht verstehe, Wie kommt es, dass ich keine weiteren Informationen darüber finden kann oder dass sich mehr Leute über ein solches häufiges Szenario beschweren: Ich führe einfach eine sehr einfache Abfrage durch, die Ergebnisse zurückbringen kann oder nicht.

Was fehlt mir?

Antwort

0

Ich weiß nicht, warum sqlite den Datentyp falsch meldet, aber: Die Datentypenüberprüfungen wurden in den letzten Pre-Release-Builds verbessert. Bitte überprüfen Sie mit dem neuesten Pre-Release-Build: Ich erwarte, dass es bereits behoben ist.