Преобразование в тип данных datetime2 в тип данных datetime в результате вне диапазона?

Я работаю над приложением, содержащим datepicker, и если я установил время в этом сборщике на очень старое значение или в далеком будущем, когда я пытаюсь сохранить это значение в базе данных, сервер выдает это исключение, в чем причина этого?

преобразование типа данных datetime2 в тип данных datetime в результате вне диапазона значение. Заявление было прекращено.

4 ответов


DateTime имеет диапазон: от 1 января 1753 года до 31 декабря 9999

DateTime2 имеет диапазон: от 0001-01-01 до 9999-12-31

поэтому, если вы вводите дату до 1753 года, вы получите эту ошибку, когда поле в таблице имеет тип DateTime.


Entity Framework добавит дату по умолчанию для поля значения {01/01/0001 00:00: 00}, и это находится вне диапазона генерации даты SQL. Поэтому, чтобы заставить его работать, нам нужно попросить EF не генерировать дату по умолчанию, мы можем сделать ее недействительной, выполнив следующее В модели этого класса.

в этом случае EntityFramework генерирует значение по умолчанию для поля LastLoggedIn. Если это поле в datebase может принимать значение null, подразумевается, что мы можем сделать его nullable, выполнив следовать в модели

 [Display(Name = "LastLoggedIn")]
        public DateTime? LastLoggedIn { get; set; }

Products prd = new Products();            
prd.CreatedDate = DateTime.Now;

вы можете добавить как выше


эта ошибка также может быть вызвана неправильным написанием имени Поля в списке привязки действия контроллера. В моей ситуации дата по умолчанию была вне диапазона, так как поле даты не было связано, как я думал.