Problème de DateTime avec une valeur par défaut et Entity FrameWork


Il m’arrive de créer des champs de type « DateTime »  auxquels je mets une valeurs par défaut (GETDATE() sur SQL Server) et interdit la valeur NULL. Pour un champ « Date de création » par exemple, je souhaite qu’à la création de l’enregistrement la date soit automatiquement insérée.

Avec Entity Framework, impossible d’inserer un nouvel enregistrement !
En effet, les champs dates qui ne peuvent contenir de valeur NULL sont automatiquement initialisées à « 01/01/0001 00:00:00 » par Entity Framework. La valeur par défaut définie en base n’a pas le temps de s’appliquer, une exception est levée avant. Voici la commande d’Entity :

[quote]exec sp_executesql N’insert [dbo].[Client](….., [dateCreation]) values (……, @7) select [ID] from [dbo].[Client] where @@ROWCOUNT > 0 and [ID] = scope_identity()’,N’….,@7 datetime2(7)’,………,@7=’0001-01-01 00:00:00′[/quote]

Comme un DateTime ne peut pas être inférieur au 01/01/1753, SQL Server interprète automatiquement la date 01/01/0001 00:00:00 en tant que DateTime2 et essai de la convertir en DateTime d’où l’erreur :

[quote]{« La conversion d’un type de données datetime2 en type de données DateTime a créé une valeur hors limites.\r\nL’instruction a été arrêtée. »} [/quote]

Pour ne pas avoir l’erreur, il faut initialiser les champs DateTime avec une valeur supérieure au 01/01/1753 avant de sauvegarder l’objet avec Entity Framework.

Il faut toujours avoir en tête que c’est la couche objet métier qui doit initialiser les valeurs par défaut et pas l’inverse, je suis averti pour la prochaine fois !

Laisser un commentaire