Convertir correctement la propriété DateTime avec Dapper sur SQLite

dapper datetime sqlite3

Question

J'utilise Dapper pour insérer et récupérer des objets depuis / vers SQLite: un objet a une propriété de type DateTime (et DateTimeOffset) que je dois persister et récupérer avec une précision en millisecondes. Je ne trouve pas de moyen de récupérer correctement la valeur car Dapper échoue avec:

    System.FormatException : String was not recognized as a valid DateTime.
   in System.DateTimeParse.ParseExactMultiple(String s, String[] formats, DateTimeFormatInfo dtfi, DateTimeStyles style)
   in System.DateTime.ParseExact(String s, String[] formats, IFormatProvider provider, DateTimeStyles style)
   in System.Data.SQLite.SQLiteConvert.ToDateTime(String dateText, SQLiteDateFormats format, DateTimeKind kind, String formatString)
   in System.Data.SQLite.SQLite3.GetDateTime(SQLiteStatement stmt, Int32 index)
   in System.Data.SQLite.SQLite3.GetValue(SQLiteStatement stmt, SQLiteConnectionFlags flags, Int32 index, SQLiteType typ)
   in System.Data.SQLite.SQLiteDataReader.GetValue(Int32 i)
   in System.Data.SQLite.SQLiteDataReader.GetValues(Object[] values)
   in Dapper.SqlMapper.<>c__DisplayClass5d.<GetDapperRowDeserializer>b__5c(IDataReader r) in SqlMapper.cs: line 2587
   in Dapper.SqlMapper.<QueryImpl>d__11`1.MoveNext() in SqlMapper.cs: line 1572
   in System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   in System.Linq.Enumerable.ToList(IEnumerable`1 source)
   in Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in SqlMapper.cs: line 1443
   in Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in SqlMapper.cs: line 1382

Que dois-je essayer? La colonne est de type DATETIME.

Dois-je créer un TypeHandler personnalisé et convertir DateTime vers et depuis une chaîne SQLite au format "o"?

Dapper version 1.38

Réponse populaire

J'ai trouvé que TypeHandler personnalisé pour les types de base ne peut pas être utilisé en raison du typeMap par défaut qui est choisi avant de rechercher TypeHandler.

J'ai ouvert un problème dapper-dot-net mais en même temps j'ai résolu de remplacer via reflet le typeMap par défaut par un nouveau comme le précédent moins les quatre clés DateTime, DateTime ?, DateTimeOffset, DateTimeOffset?



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi