5 votes

NHibernate 2.1.2 lève une exception de débordement de DateTime null

J'ai un problème similaire à ces questions :

Fichiers de mapping NHibernate 2.* : comment définir le type DateTime nullable (DateTime ?) ?

NHibernate ne persiste pas les DateTime Dépassement de capacité SqlDateTime

J'utilise NHibernate 2.1.2 et FluentNhibernate 1.0.0.636. Avec NHibernate 2.x, la fonction nullable DateTime? Le problème devrait être résolu et je ne devrais pas avoir à faire quoi que ce soit de spécial avec ma cartographie. En conséquence, toutes mes propriétés DateTime sont simplement définies comme suit :

public virtual DateTime? CreatedOn { get; set; }

Dans ma base de données (SQL2008), toutes les propriétés DateTime sont configurées pour autoriser les nullités. Mon fichier de configuration NHibernate est configuré pour utiliser le dialecte SQL2008 :

<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>

NHibernate fonctionne bien pour tout ce qui n'inclut pas un DateTime. Pour référence, voici l'erreur exacte que je reçois :

> at
> NHibernate.AdoNet.SqlClientSqlCommandSet.ExecuteNonQuery()</StackTrace><ExceptionString>System.Data.SqlTypes.SqlTypeException:
> SqlDateTime overflow. Must be between
> 1/1/1753 12:00:00 AM and 12/31/9999
> 11:59:59 PM.

Si j'exécute SQL Profiler, je peux voir la dernière commande que NHibernate tente d'exécuter (cette déclaration était très longue, je l'ai donc tronquée) :

exec sp_executesql N'UPDATE Projects SET Job = @p0, CreatedOn = @p1, .. WHERE (Where Clause), @p0=219221, @p1=NULL

Si j'exécute cette déclaration comme une requête, SQL la persiste bien, sans se plaindre du tout !

Qu'est-ce qui se passe ?

1voto

Jamie Ide Points 28680

Vos propriétés DateTime sont probablement définies sur DateTime.MinValue (1/1/0001) au lieu de null ou d'une valeur comprise dans la plage valide pour une colonne DateTime.

0voto

chum of chance Points 1682

Je ne sais pas pourquoi, mais ça marche. aquí . Contrairement à l'exemple du lien, les miens sont DateTime? donc .... Je ne sais pas pourquoi cela fonctionne, mais c'est le cas.

0voto

viggity Points 5342

J'ai eu le même problème. J'ai d'abord pensé l'avoir résolu en changeant mon type sql de nullable date à nullable datetime. Cependant, c'était un mirage. La cause première était une mise à jour en cascade sur une autre table nouvellement ajoutée.

Ce problème aurait été rapidement résolu si tout le monde (mais surtout MS) lançait des erreurs plus descriptives. Cest la vie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X