У меня похожая проблема с этими вопросами:
NHibernate 2. * Отображение файлов: как определить обнуляемый тип DateTime (DateTime?)?
NHibernate не будет сохраняться Переполнение DateTime SqlDateTime
Я использую NHibernate 2.1.2 и FluentNhibernate 1.0.0.636.В NHibernate 2.x проблема nullable DateTime?
должна быть исправлена, и мне не нужно было делать ничего особенного с моим отображением.Соответственно, все мои свойства DateTime просто установлены следующим образом:
public virtual DateTime? CreatedOn { get; set; }
В моей базе данных (SQL2008) все свойства DateTime имеют значение null.У меня есть файл конфигурации NHibernate для использования диалекта SQL2008:
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
NHibernate отлично работает для всего, что не включает DateTime.Для справки вот точная ошибка, которую я получаю:
> 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.
Если я запускаю SQL Profiler, я вижу последнюю команду, которую пытается выполнить NHibernate (это был очень длинный оператор, поэтому яусек это):
exec sp_executesql N'UPDATE Projects SET Job = @p0, CreatedOn = @p1, .. WHERE (Where Clause), @p0=219221, @p1=NULL
Если я выполню этот оператор как запрос, SQL сохранит его в порядке, не будет жаловаться вообще!
Что происходит?