sql >> Databasteknik >  >> RDS >> Sqlserver

Flytande NHibernate-problem med SQL Server 2008 DATE Kolumnvärden

Förlåt, insåg precis att jag borde posta detta som ett svar på frågan istället för att bara kommentera... Snälla skratta inte åt den "nya killen!"

Genom ytterligare diskussioner och tester verkar det som om det här problemet är relaterat till ADO.NET och NHibernates användning av kolumnerna DbType.Date för MS SQL 2008 av datatypen DATE. Om koden använde SqlDbType.Date istället för DbType.Date skulle inga sådana problem uppstå och allt skulle fungera som specificerat.

Även om användningen av DbType.Date kan verka mer "portabel" för andra databastyper, introducerar det detta problem, eftersom ADO.NET DbType.Date har begränsningen av ett minimivärde på 1/1/1753.

En lösning på det här problemet är att tala om för NHibernate att kolumntypen är en DATETIME2, som också stöder datumvärden tidigare än 1/1/1753. Om NHibernate-mappningen är:

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

Koden fungerar som förväntat utan undantag.

Det är synd att NHibernate inte känner igen att det använder MsSql2008-dialekten och använder SqlDbTypes istället för DbTypes, men den här lösningen verkar fungera för nu.

För mer information om ADO.NET-aspekterna, se ADO.NET Infoga minvärde i SQL Server 2008 Datumkolumn kraschar . Tack till @Graham Bunce för hans hjälp med detta.

Jag hoppas att denna information hjälper alla som stöter på detta problem i framtiden.



  1. Oracle:Välj Från Record Datatype

  2. Hur kan jag göra en primärnyckel som AUTOINCREMENT

  3. Hur man använder GROUP BY för att hämta en resultatuppsättning med prioritet på alfabetisering

  4. mysql -> infoga i tbl (välj från en annan tabell) och några standardvärden