sql >> Databáze >  >> RDS >> Sqlserver

Plynulé problémy NHibernate s hodnotami sloupce DATE SQL Server 2008

Promiň, právě jsem si uvědomil, že bych to měl zveřejnit jako odpověď na otázku a ne jen komentovat... Prosím, nesmějte se tomu "novému klukovi!"

Na základě dalších diskusí a testování se zdá, že tento problém souvisí s tím, že ADO.NET a NHibernate používají sloupce DbType.Date pro MS SQL 2008 datového typu DATE. Pokud by kód používal SqlDbType.Date místo DbType.Date, žádné takové problémy by nenastaly a vše by fungovalo tak, jak je uvedeno.

I když se použití DbType.Date může zdát "přenositelnější" na jiné typy databází, přináší tento problém, protože ADO.NET DbType.Date má omezení na minimální hodnotu 1/1/1753.

Řešením tohoto problému je sdělit NHibernate, že typ sloupce je DATETIME2, který také podporuje hodnoty data dřívější než 1. 1. 1753. Pokud je mapování NHibernate:

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

Kód funguje podle očekávání bez výjimek.

Je škoda, že NHibernate nerozpozná, že používá dialekt MsSql2008 a nepoužívá SqlDbTypes spíše než DbTypes, ale zdá se, že toto řešení zatím funguje.

Další informace o aspektech ADO.NET najdete na ADO.NET Vložit minimální hodnotu do SQL Server 2008 sloupec Datum selhává . Děkujeme @Graham Bunce za jeho pomoc s tímto.

Doufám, že tyto informace pomohou každému, kdo se v budoucnu setká s tímto problémem.



  1. Velmi pomalý výkon v Django se vzdáleným serverem Oracle

  2. codeIgniter místo toho použijte mysql_real_escape_string(). Problém s připojením k databázi

  3. Hledání rozdílu mezi nejnovějším a druhým nejnovějším termínem

  4. Top N na skupinu s více spojeními ke stolu