sql >> Base de Datos >  >> RDS >> Sqlserver

Problemas fluidos de NHibernate con los valores de la columna DATE de SQL Server 2008

Lo siento, me acabo de dar cuenta de que debería publicar esto como una respuesta a la pregunta en lugar de solo comentar... ¡Por favor, no te rías del "chico nuevo!"

A través de más discusiones y pruebas, parece que este problema está relacionado con el uso de ADO.NET y NHibernate de DbType.Date para las columnas de MS SQL 2008 del tipo de datos DATE. Si el código usara SqlDbType.Date en lugar de DbType.Date, no se producirían tales problemas y todo funcionaría según lo especificado.

Si bien el uso de DbType.Date puede parecer más "portátil" para otros tipos de bases de datos, presenta este problema, ya que ADO.NET DbType.Date tiene la restricción de un valor mínimo de 1/1/1753.

Una solución a este problema es decirle a NHibernate que el tipo de columna es DATETIME2, que también admite valores de fecha anteriores al 1/1/1753. Si el mapeo de NHibernate es:

<property name="TestDate" type="datetime2">
  <column name="TestDate" sql-type="date" />
</property>

El código funciona como se esperaba sin excepciones.

Es una lástima que NHibernate no reconozca que está usando el dialecto MsSql2008 y usa SqlDbTypes en lugar de DbTypes, pero esta solución parece funcionar por ahora.

Para obtener más información sobre los aspectos de ADO.NET, consulte ADO.NET Insertar valor mínimo en SQL Server 2008 La columna de fecha se bloquea . Gracias a @Graham Bunce por su ayuda con esto.

Espero que esta información ayude a cualquiera que se encuentre con este problema en el futuro.