Comment puis-je amener Dapper à mapper. Datetime vers datetime2?

c# dapper

Question

Assez simple, je convertis notre système existant de EF à Dapper. Pour diverses raisons professionnelles, nous ne pouvons pas vraiment changer la base de données, certaines tables ont des colonnes de type DateTime2. Dapper convertit tout DateTime .net en DbType.DateTime.

Quelqu'un a dû se heurter à cela avant et trouver une solution facile?

Réponse acceptée

Dapper est littéralement un fichier unique que vous incluez dans votre base de code. Modifiez simplement le fichier:

Remplacer (autour de la ligne 300):

        typeMap[typeof(Guid)] = DbType.Guid;
        typeMap[typeof(DateTime)] = DbType.DateTime;
        typeMap[typeof(DateTimeOffset)] = DbType.DateTimeOffset;
        typeMap[typeof(byte[])] = DbType.Binary;

Avec:

        typeMap[typeof(Guid)] = DbType.Guid;
        typeMap[typeof(DateTime)] = DbType.DateTime2;
        typeMap[typeof(DateTimeOffset)] = DbType.DateTimeOffset;
        typeMap[typeof(byte[])] = DbType.Binary;

Modifier:
Il y a aussi un DateTime nullable plus bas dans ce bloc de mappages, autour de la ligne 319:

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

À:

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

Réponse populaire

Il existe une solution beaucoup plus facile dans une question similaire :

SqlMapper.AddTypeMap(typeof(DateTime), System.Data.DbType.DateTime2);

Cela doit être appliqué avant les INSERT . Merci, @Igand.




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