非常に単純です。既存のシステムをEFからDapperに変換しています。企業のさまざまな理由により、データベースを実際に変更することはできません。一部のテーブルには、DateTime2タイプの列があります。Dapperは、任意の.netDateTimeをDbType.DateTimeに変換します。
誰かが以前にこれにぶつかって簡単な解決策を見つけたに違いありませんか?
同様の質問には、はるかに簡単な解決策があります。
SqlMapper.AddTypeMap(typeof(DateTime), System.Data.DbType.DateTime2);
これは の前 に適用する必要がありますINSERT
。ありがとう、@Igand。
Dapper は文字通り、コード ベースに含める単一のファイルです。ファイルを編集するだけです:
置き換えます (300 行目あたり):
typeMap[typeof(Guid)] = DbType.Guid;
typeMap[typeof(DateTime)] = DbType.DateTime;
typeMap[typeof(DateTimeOffset)] = DbType.DateTimeOffset;
typeMap[typeof(byte[])] = DbType.Binary;
と:
typeMap[typeof(Guid)] = DbType.Guid;
typeMap[typeof(DateTime)] = DbType.DateTime2;
typeMap[typeof(DateTimeOffset)] = DbType.DateTimeOffset;
typeMap[typeof(byte[])] = DbType.Binary;
編集:
319行目あたりのマッピングのブロックのさらに下に、null可能なDateTimeもあります:
typeMap[typeof(DateTime?)] = DbType.DateTime;
typeMap[typeof(DateTimeOffset?)] = DbType.DateTimeOffset;
に:
typeMap[typeof(DateTime?)] = DbType.DateTime2;
typeMap[typeof(DateTimeOffset?)] = DbType.DateTimeOffset;