Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Fluent NHibernate-Probleme mit SQL Server 2008 DATE-Spaltenwerten

Tut mir leid, mir wurde gerade klar, dass ich dies als Antwort auf die Frage posten sollte, anstatt nur zu kommentieren ... Bitte lache nicht über den "Neuen!"

Durch weitere Diskussionen und Tests scheint dieses Problem mit der Verwendung von DbType.Date für MS SQL 2008-Spalten des Datentyps DATE durch ADO.NET und NHibernate zusammenzuhängen. Wenn der Code SqlDbType.Date anstelle von DbType.Date verwenden würde, würden keine derartigen Probleme auftreten und alles würde wie angegeben funktionieren.

Während die Verwendung von DbType.Date für andere Datenbanktypen "portabler" erscheinen mag, führt sie dieses Problem ein, da das ADO.NET DbType.Date die Einschränkung auf einen Mindestwert von 1/1/1753 hat.

Eine Problemumgehung für dieses Problem besteht darin, NHibernate mitzuteilen, dass der Typ der Spalte ein DATETIME2 ist, der auch Datumswerte vor dem 1.1.1753 unterstützt. Wenn die NHibernate-Zuordnung lautet:

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

Der Code verhält sich ausnahmslos wie erwartet.

Es ist zu schade, dass NHibernate nicht erkennt, dass es den MsSql2008-Dialekt verwendet und die SqlDbTypes anstelle der DbTypes verwendet, aber diese Problemumgehung scheint vorerst zu funktionieren.

Weitere Informationen zu den Aspekten von ADO.NET finden Sie unter ADO.NET Insert Min Value in SQL Server 2008 Date-Spalte stürzt ab . Danke an @Graham Bunce für seine Hilfe dabei.

Ich hoffe, diese Informationen helfen allen, die in Zukunft auf dieses Problem stoßen.