How can I get Dapper to map .net datetime to datetime2?
Dapper is litterally a single file that you include into your code base. Just edit the file:
Replace (around line 300):
typeMap[typeof(Guid)] = DbType.Guid;
typeMap[typeof(DateTime)] = DbType.DateTime;
typeMap[typeof(DateTimeOffset)] = DbType.DateTimeOffset;
typeMap[typeof(byte[])] = DbType.Binary;
With:
typeMap[typeof(Guid)] = DbType.Guid;
typeMap[typeof(DateTime)] = DbType.DateTime2;
typeMap[typeof(DateTimeOffset)] = DbType.DateTimeOffset;
typeMap[typeof(byte[])] = DbType.Binary;
Edit:
There's also a nullable DateTime further down that block of mappings, around line 319:
typeMap[typeof(DateTime?)] = DbType.DateTime;
typeMap[typeof(DateTimeOffset?)] = DbType.DateTimeOffset;
To:
typeMap[typeof(DateTime?)] = DbType.DateTime2;
typeMap[typeof(DateTimeOffset?)] = DbType.DateTimeOffset;
There's a much easier solution now in a similar question:
SqlMapper.AddTypeMap(typeof(DateTime), System.Data.DbType.DateTime2);
This must be applied before INSERT
's. Thanks, @Igand.