Je vais avoir un problème similaire à ces questions:NHibernate 2.1.2 jeter exception débordement DateTime null
NHibernate 2.* mapping files: how to define nullable DateTime type (DateTime?)?
NHibernate won't persist DateTime SqlDateTime overflow
J'utilise NHibernate 2.1.2 et FluentNhibernate 1.0.0.636 . Avec NHibernate 2.x le problème nullable DateTime?
devrait être réparé et je ne devrais pas avoir à faire quelque chose de spécial avec ma cartographie. En conséquence, toutes mes propriétés DateTime sont simplement définies comme ceci:
public virtual DateTime? CreatedOn { get; set; }
Dans ma base de données (SQL2008), toutes les propriétés DateTime sont définies pour permettre nul. J'ai mon NHibernate configuration du fichier de configuration pour utiliser le dialecte SQL2008:
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
NHibernate fonctionne bien pour tout ce qui ne comprend pas 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 je lance SQL Profiler, je peux voir la dernière commande que NHibernate tente d'exécuter (ce qui était une très longue déclaration, donc je l'ai tronqué il):
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 persiste, il très bien, ne se plaint pas du tout!
Que se passe-t-il?
Un horodatage? fonctionne car il permet à DateTime d'être null.Si une date-heure n'est pas-nullable (juste DateTime), il est instancié à la valeur min, qui est 1/1/0001. –