Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Problemy płynne NHibernate z wartościami kolumn DATE w programie SQL Server 2008

Przepraszam, właśnie zdałem sobie sprawę, że powinienem to opublikować jako odpowiedź na pytanie, zamiast po prostu komentować... Proszę, nie śmiej się z "nowego faceta!"

Dzięki dalszym dyskusjom i testom wydaje się, że ten problem jest związany z wykorzystaniem przez ADO.NET i NHibernate kolumny DbType.Date dla MS SQL 2008 typu DATE. Gdyby kod używał SqlDbType.Date zamiast DbType.Date, takie problemy nie wystąpiłyby i wszystko działałoby zgodnie z opisem.

Chociaż użycie DbType.Date może wydawać się bardziej "przenośne" dla innych typów baz danych, wprowadza ten problem, ponieważ ADO.NET DbType.Date ma ograniczenie minimalnej wartości 1/1/1753.

Obejściem tego problemu jest poinformowanie NHibernate, że typem kolumny jest DATETIME2, który obsługuje również wartości dat wcześniejsze niż 1/01/1753. Jeśli mapowanie NHibernate to:

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

Kod działa zgodnie z oczekiwaniami, bez wyjątków.

Szkoda, że ​​NHibernate nie rozpoznaje, że używa dialektu MsSql2008 i używa SqlDbTypes zamiast DbTypes, ale to obejście wydaje się działać na razie.

Aby uzyskać więcej informacji na temat aspektów ADO.NET, zobacz ADO.NET Wstaw wartość minimalną do kolumny Data SQL Server 2008 ulega awarii . Dziękuję @Grahamowi Bunce za jego pomoc w tym.

Mam nadzieję, że te informacje pomogą każdemu, kto napotka ten problem w przyszłości.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy zapytanie REPLACE INTO jest dobrą praktyką?

  2. Jak utworzyć ograniczenie klucza obcego z opcją ON DELETE SET NULL w programie SQL Server — samouczek SQL Server / TSQL, część 81

  3. Grupuj dane poprzez zmianę wartości kolumny grupującej w kolejności

  4. Po usunięciu kaskady dla tabeli samoodnoszącej się

  5. Bulk DELETE w SQL Server 2008 (Czy istnieje coś takiego jak Bulk Copy (bcp) do usuwania danych?)