Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Problemi fluidi di NHibernate con i valori della colonna DATE di SQL Server 2008

Scusa, mi sono appena reso conto che dovevo postare questo come risposta alla domanda invece di limitarsi a commentare... Per favore, non ridere del "nuovo ragazzo!"

Attraverso ulteriori discussioni e test, sembra che questo problema sia correlato all'uso da parte di ADO.NET e NHibernate delle colonne DbType.Date per MS SQL 2008 del tipo di dati DATE. Se il codice utilizzasse SqlDbType.Date anziché DbType.Date, non si verificherebbero problemi di questo tipo e tutto funzionerebbe come specificato.

Sebbene l'uso di DbType.Date possa sembrare più "portabile" per altri tipi di database, introduce questo problema, poiché ADO.NET DbType.Date ha la restrizione di un valore minimo di 1/1/1753.

Una soluzione a questo problema consiste nel dire a NHibernate che il tipo della colonna è un DATETIME2, che supporta anche valori di data precedenti a 1/1/1753. Se la mappatura NHibernate è:

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

Il codice funziona come previsto senza eccezioni.

È un peccato che NHibernate non riconosca che sta usando il dialetto MsSql2008 e usa SqlDbTypes anziché DbTypes, ma per ora questa soluzione sembra funzionare.

Per ulteriori informazioni sugli aspetti di ADO.NET, vedere ADO.NET Inserisci valore minimo in SQL Server 2008 La colonna Data si arresta in modo anomalo . Grazie a @Graham Bunce per il suo aiuto con questo.

Spero che queste informazioni aiutino chiunque si imbatta in questo problema in futuro.