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

Flydende NHibernate-problemer med SQL Server 2008 DATE-kolonneværdier

Undskyld, jeg har lige indset, at jeg burde poste dette som et svar på spørgsmålet i stedet for bare at kommentere... Lad være med at grine af den "nye fyr!"

Gennem yderligere diskussioner og test ser det ud til, at dette problem er relateret til ADO.NET og NHibernates brug af DbType.Date for MS SQL 2008-kolonner af datatypen DATE. Hvis koden brugte SqlDbType.Date i stedet for DbType.Date, ville der ikke opstå sådanne problemer, og alt ville fungere som angivet.

Selvom brugen af ​​DbType.Date kan virke mere "bærbar" til andre databasetyper, introducerer det dette problem, da ADO.NET DbType.Date har begrænsningen på en minimumsværdi på 1/1/1753.

En løsning på dette problem er at fortælle NHibernate, at kolonnetypen er en DATETIME2, som også understøtter datoværdier tidligere end 1/1/1753. Hvis NHibernate-tilknytningen er:

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

Koden fungerer som forventet uden undtagelser.

Det er for dårligt, at NHibernate ikke genkender, at det bruger MsSql2008-dialekten og bruger SqlDbTypes i stedet for DbTypes, men denne løsning ser ud til at virke for nu.

For mere information om ADO.NET-aspekterne, se ADO.NET Indsæt min. værdi i SQL Server 2008 Dato kolonne går ned . Tak til @Graham Bunce for hans hjælp med dette.

Jeg håber, at disse oplysninger hjælper enhver, der løber ind i dette problem i fremtiden.



  1. LAST_INSERT_ID( ) returnerer flere rækker med 0?

  2. Javascript funktion post og kalde php script

  3. Hvordan kan jeg få den komplette definition (sql) af systemvisninger som user_objects?

  4. Sådan konverteres Oracle Date-format til Java?