Scary NHibernate und Danke Google :-)

by admin 23. January 2008 08:13

Manchmal ist ein Nhibernate wirklich verblüffend. Hier ein Beispiel: Eine in einem einfachen Test Szenario abgesetzte Abfrage bringt das gewünschte Ergebnis. Wird die gleiche Abfrage zum zweiten Mal ausgeführt gibt es folgendes:

SqlTypeException for a SqlDateTime overflow.  SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

Hmm – eine neuer Stern am Himmel der Programmiertechniken nennt sich „Google based programming“. Diesem Prinzip folgend wurde zur Lösung folgende Suchabfrage formuliert:

multiple nhibernate queries result in SqlDateTime overflow

Bingo,  der erste Treffer, ein Blogpost von „James Gregory“  mit dem Titel „NHibernate and the SqlTypeException“, erklärt das Problem Haargenau:

Nach der ersten Abfrage bekommt NHibernate die Werte aus der Tabelle, die sich nicht mit den Werten des gerade abgeholten Objekts decken. Statt einem Null, hat die DateTime Property als Default den MinValue. Ergo muss ein Fehler vorliegen, den es gerade zu rücken gilt.

NHibernate setzt also eine update Statement ab, um die Datenbank abzugleichen. Dagegen sträubt sich der SQL-Server, der ein anderes Verständnis von einem Minimum Wert für eine DateTime Feld hat, nämlich „01/01/1753 00:00“ im Gegensatz zum .NET DateTime.MinValue von  „00:00:00.0000000, January 1, 0001“. Boom ein Fehler.

Die Korrektur ist, die gemappte DateTime Property Nullable zu setzen (DateTime? ..), das korrekte Mapping not-null="false" reicht nicht. 

Danke James Gregory :-)

enjoyed the post?

Tags:

Add comment

  Country flag

biuquote
  • Comment
  • Preview
Loading

About Oliver

shades-of-orange.com code blog logo I build web applications using ASP.NET and have a passion for javascript. Enjoy MVC 4 and Orchard CMS, and I do TDD whenever I can. I like clean code. Love to spend time with my wife and our children. My profile on Stack Exchange, a network of free, community-driven Q&A sites

About Anton

shades-of-orange.com code blog logo I'm a software developer at teamaton. I code in C# and work with MVC, Orchard, SpecFlow, Coypu and NHibernate. I enjoy beach volleyball, board games and Coke.