2010-12-09 11 views
5

estoy teniendo un problema similar a estas preguntas:NHibernate 2.1.2 tirar desbordamiento nula DateTime excepción

NHibernate 2.* mapping files: how to define nullable DateTime type (DateTime?)?

NHibernate won't persist DateTime SqlDateTime overflow

estoy usando NHibernate 2.1.2 y FluentNhibernate 1.0.0.636 . Con NHibernate 2.x se debe corregir el problema de anulación de nulos DateTime? y no debería tener que hacer nada especial con mi asignación. En consecuencia, todas mis propiedades DateTime simplemente se establecen así:

public virtual DateTime? CreatedOn { get; set; } 

En mi base de datos (SQL2008), todas las propiedades DateTime se establecen para permitir nula. Tengo mi configuración archivo de configuración de NHibernate para utilizar el dialecto SQL2008:

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

NHibernate funciona bien para cualquier cosa que no incluye un DateTime. Como referencia, aquí está el error exacto que estoy recibiendo:

> 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 corro de SQL, puedo ver el último comando que NHibernate intenta ejecutar (esto fue una declaración muy largo, por lo que he truncado):

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

Si ejecuto esta declaración como una consulta SQL que persiste bien, no se queja en absoluto!

¿Qué está pasando?

Respuesta

0

No sé por qué, pero esto funciona here. A diferencia del ejemplo en el enlace, el mío es DateTime? así que ... No sé por qué funciona, pero lo hace.

+0

A DateTime? funciona porque permite que DateTime sea nulo. Si una fecha y hora no es anulable (solo DateTime), se crea una instancia para el valor mínimo, que es 1/1/0001. –

1

Sus propiedades DateTime probablemente están configuradas en DateTime.MinValue (1/1/0001) en lugar de nulo o un valor en el rango válido para una columna DateTime.

0

Tuve este mismo problema. Al principio pensé que lo solucioné cambiando mi tipo de sql de una fecha anulable a una fecha de tiempo anulable. Sin embargo, eso fue un espejismo. La causa raíz fue una actualización en cascada en otra tabla recién agregada.

Esto se habría resuelto rápidamente si todos (especialmente MS) lanzaran más errores descriptivos. Así es la vida.

Cuestiones relacionadas