Ich verwende fastcrud und dapper, um meine Abfrageergebnisse meinem benutzerdefinierten Typ zuzuordnen. Ich untersuchte die Dapper-Bibliothek und kam zu dem Schluss, dass dies ein Problem mit dem Microsoft.Data.Sqlite-Paket ist. Ich bin mir nicht sicher, ob es dort repariert werden muss, aber das ist das Problem.Sqlite mit Dapper. Fehler beim Analysieren der Spalte. Objekt des Typs System.Int64 kann nicht in den Typ System.Double geschrieben werden
Vor dem Analysieren jeder Zeile aus dem Abfrageergebnis verwendet Dapper die GetFieldType-Methode aus der SqliteDataReader-Klasse, um die richtigen Spaltentypen zu ermitteln.
die folgende Tabelle Stellen Sie sich vor:
Id | MinTemp | MaxTemp
1 | 10.5 | 18.2
2 | 10.6 | 20
Die sqlitedatareader.GetFieldType
Methode gibt Ihnen die folgenden Arten:
System.Int64 für Id und System.Double für beide MinTemp und MaxTemp Diese scheint korrekt zu sein, aber beim Parsen der Ergebnisse tritt der folgende Fehler in Zeile 2 auf:
Fehler beim Analysieren der Spalte 10 (MaxTemp = 20 - Int64) Das Objekt vom Typ 'System.Int64' konnte nicht in den Typ 'System.Double' umgewandelt werden.
Aufgrund der dynamic type system of SQLite ändert es den Typ für MaxTemp in Zeile 2 zu System.Int64. Aber da Dapper den Typ für MaxTemp definiert hat, um ihn zu verdoppeln, verursacht dies den oben genannten Fehler.
Wenn ich meinen MaxTemp-Wert in meiner SQLite-Datenbank auf 20.00001 ändern, ist das Problem behoben, aber das ist nicht korrekt.
Gebraucht Pakete: "Microsoft.Data.Sqlite": "1.0.0"
Jeder weiß, wie dieses Problem zu lösen?
In einem ähnlichen Problem selbst mit Microsoft.Data.Sqlite und Dapper. Ich habe eine SQLite-Spalte als Ganzzahl definiert, aber mein Modell verwendet eine Bool. Für den Moment habe ich diese spezifische Abfrage neu geschrieben, um SqliteConnection, SqliteCommand und SqliteDataReader zu verwenden. Nicht mein Favorit, aber schneller als das Wurzelproblem zu erforschen. –
Sieht aus wie ein bekanntes Problem. https://github.com/StackExchange/Dapper/issues/642 – Eric
Habe gerade das gleiche Problem in einem ähnlichen Beispiel gesehen. Reihe # 2 wirft. – DaveInCaz