NHibernate 2.1.2 выбрасывает исключение переполнения нуля DateTime - PullRequest
5 голосов
/ 09 декабря 2010

У меня похожая проблема с этими вопросами:

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 сохранит его в порядке, не будет жаловаться вообще!

Что происходит?

Ответы [ 3 ]

1 голос
/ 09 декабря 2010

Для ваших свойств DateTime, вероятно, установлено значение DateTime.MinValue (1/1/0001) вместо нуля или значения в допустимом диапазоне для столбца DateTime.

0 голосов
/ 23 января 2018

У меня была такая же проблема. Сначала я подумал, что я исправил это, переключив мой тип sql с обнуляемой даты на обнуляемую дату и время. Однако это был мираж. Основной причиной было каскадное обновление другой недавно добавленной таблицы.

Это было бы быстро решено, если бы все (но особенно MS) выдавали больше описательных ошибок. Такова жизнь.

0 голосов
/ 10 декабря 2010

Я не знаю почему, но это работает здесь .В отличие от примера в ссылке, мои DateTime?, так что ... Я не знаю, почему это работает, но это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...