En utilisant Dapper-dot-net, comment mapper la colonne SQL Time sur un type .Net?

.net dapper tsql

Question

J'ai une base de données existante qui utilise le type SQL time(7) , qui ne correspond pas directement à un type .Net.

Question: En utilisant Dapper, comment mapper une colonne de time SQL sur un type .Net?

Problème: lorsque j'essaie d'associer implicitement une colonne SQL time(7) à DateTime aide de Dapper-dot-net, j'obtiens l'exception suivante:

Une exception de type 'System.Data.DataException' s'est produite dans Dapper.dll mais n'a pas été traitée dans le code utilisateur

Informations supplémentaires: Erreur d'analyse de la colonne 5 (CheckInTime = 08: 54: 43.1470000 - Object)

J'ai supposé qu'il correspondrait automatiquement à DateTime, mais cela ne semble pas le faire

Réponse populaire

J'ai réussi à mapper les colonnes SQL time (7) sur System.TimeSpan .

Comme Dan l'a souligné, un TimeSpan est "sémantiquement" moins approprié si votre intention est de représenter une heure du jour.

Mais je pense que, techniquement, il n'y a pas de perte d'information allant de temps (7) à TimeSpan, donc les données sont là et c'est une question de sens.

Une des manières que j'ai TimeSpan pour alléger la laideur est d'utiliser une propriété privée de TimeSpan uniquement pour interroger et exposer les données dans une propriété publique de type personnalisé.

Je préfère cela à l'utilisation d'un DateTime en combinaison avec l'appel à CONVERT() dans le SQL, car même avec le DateTime vous avez toujours une représentation "imparfaite" de vos données (la partie date est fausse) et vous introduisez la laideur dans le SQL aussi.

Mais, à ce stade, je pense que cela peut être considéré comme une question de préférence personnelle.




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