很简单,我将现有系统从EF转换为Dapper。由于各种公司原因,我们无法真正更改数据库,某些表的列类型为DateTime2。 Dapper将任何.net DateTime转换为DbType.DateTime。

一定有人曾对此提出质疑并找到了简单的解决方案吗?

最佳答案

简而言之,Dapper是您包含在代码库中的single file。只需编辑文件:

更换(围绕第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行附近,在该映射块的下方还有一个可为空的DateTime:
        typeMap[typeof(DateTime?)] = DbType.DateTime;
        typeMap[typeof(DateTimeOffset?)] = DbType.DateTimeOffset;

至:
        typeMap[typeof(DateTime?)] = DbType.DateTime2;
        typeMap[typeof(DateTimeOffset?)] = DbType.DateTimeOffset;

08-19 03:22