2010-12-09 7 views
5

ich auf diese Fragen ein ähnliches Problem mit:NHibernate 2.1.2 werfen Datetime null Überlauf Ausnahme

NHibernate 2.* mapping files: how to define nullable DateTime type (DateTime?)?

NHibernate won't persist DateTime SqlDateTime overflow

Ich verwende NHibernate 2.1.2 und FluentNHibernate 1.0.0.636 . Mit NHibernate 2.x sollte das NULL-fähige DateTime? Problem behoben werden und ich sollte nichts spezielles mit meinem Mapping tun müssen. Dementsprechend sind alle meine Datetime-Eigenschaften sind einfach wie so gesetzt:

public virtual DateTime? CreatedOn { get; set; } 

In meiner Datenbank (SQL2008), alle Datetime-Eigenschaften werden auf null zulassen. Ich habe mein Setup NHibernate-Konfigurationsdatei den SQL2008 Dialekt zu verwenden:

<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property> 

NHibernate arbeitet für alles in Ordnung, die keine Datetime enthält. Ich erhalte als Referenz, hier ist die genaue Fehler:

> at 
> NHibernate.AdoNet.SqlClientSqlCommandSet.ExecuteNonQuery()</StackTrace><ExceptionString>System.Data.SqlTypes.SqlTypeException: 
> SqlDateTime overflow. Must be between 
> 1/1/1753 12:00:00 AM and 12/31/9999 
> 11:59:59 PM. 

Wenn ich SQL Profiler ausgeführt wird, kann ich den letzten Befehl sehen, die NHibernate auszuführen versucht, (dies war eine sehr lange Erklärung, also habe ich sie abgeschnitten):

Wenn ich diese Anweisung als eine Abfrage ausführen, beharrt SQL in Ordnung, beschwert sich überhaupt nicht!

Was ist los?

Antwort

0

Ich weiß nicht, warum, aber das funktioniert here. Anders als im Beispiel in der Verbindung, sind meine DateTime? so .... Ich weiß nicht, warum es funktioniert, aber es tut.

+0

Ein Datetime? funktioniert, weil die DateTime auf null gesetzt werden kann. Wenn eine Datum-Uhrzeit nicht-Nullable ist (nur DateTime), wird sie in den Min-Wert instanziiert, der 1/1/0001 ist. –

1

Ihre Datetime-Eigenschaften sind wahrscheinlich zu DateTime.MinValue (1.1.0001) anstelle von null oder einem Wert im gültigen Bereich für eine Datetime-Spalte festgelegt.

0

Ich hatte das gleiche Problem. Zuerst dachte ich, ich habe es behoben, indem ich meinen SQL-Typ von einem Nullable-Datum auf ein Nullable-Datetime umgestellt habe. Das war jedoch eine Fata Morgana. Die Ursache war eine kaskadierende Aktualisierung einer anderen neu hinzugefügten Tabelle. wenn jeder (vor allem aber MS) Diese wurden warf schnell gelöst kräftigeren Fehler

würde. So ist das Leben.