SQLite에서 Dapper로 DateTime 속성을 올바르게 변환

dapper datetime sqlite3

문제

Dapper를 사용하여 SQLite에 /로부터 객체를 가져오고 있습니다 : 하나의 객체는 DateTime (및 DateTimeOffset) 유형의 속성을 보유하고 있으며 밀리 초 단위의 정밀도로 유지해야합니다. Dapper가 실패하기 때문에 값을 올바르게 검색 할 수있는 방법을 찾을 수 없습니다.

    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

무엇을 시도해야합니까? 열의 유형은 DATETIME입니다.

나는 사용자 정의 TypeHandler를 만들고 DateTime을 "o"형식의 SQLite 문자열로 변환해야합니까?

Dapper 버전 1.38

인기 답변

TypeHandler를 찾기 전에 선택되는 기본 typeMap 때문에 기본 유형의 사용자 정의 TypeHandler를 사용할 수 없다는 것을 발견했습니다.

문제는 dapper-dot-net 을 열었지 만, 리플렉션을 통해 기본 typeMap을 이전 마이너스 DateTime, DateTime?, DateTimeOffset, DateTimeOffset과 같은 새로운 것으로 대체하는 방법을 해결했습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow