Сохранение DateTime в сгенерированном в коде исключение базы данных - PullRequest
1 голос
/ 27 января 2012

У меня есть следующая модель объекта:

public class ScheduledTask
    {
        public virtual int ScheduledTaskId { get; set; }    
        public virtual Incident TemplateIncident { get; set; }
        //Some props are omitted for simplicity    
        [Display(Name = "Next runtime")]
        [Required]
        [DataType(DataType.DateTime)]
        public virtual DateTime NextExecuteAfterDate { get; set; }
    }

Это часть DataContext как:

public DbSet<ScheduledTask> ScheduledTasks { get; set; }

Пользовательский интерфейс в решении - это сайт MVC3.

Каждый раз, когда пользователь сохраняет запись, планируемое задание сохраняется вместе:

_db.Add(new ScheduledTask
                        {
                            NextExecuteAfterDate = DateTime.MinValue,
                            Schedule = scheduleTypeId,
                            TemplateIncident = incident
                        });
            _db.SaveChanges();

Как видите, я создаю экземпляр моего класса сущностей, присваиваю свойству DateTime минимальное значение и добавляю его к DbContext. Тогда я звоню SaveChanges().

SaveChages() генерирует

[SqlException (0x80131904): The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.
The statement has been terminated.]

A NextExecuteAfterDate в базе данных - это столбец типа datetime, not null.

Откуда берется datetime2 и как я могу исправить проблему и заставить EF добавить строку в таблицу?

1 Ответ

1 голос
/ 27 января 2012

сервер sql хочет сохранить 1.1.0001 в базе данных, но это не входит в диапазон значений SQL Server DateTimes. Я не так много работал с EF, но в других ORM вы можете просто изменить DateTime на Nullable и явно сохранить нулевое значение. как это:

public class ScheduledTask
{
    public virtual int ScheduledTaskId { get; set; }    
    public virtual Incident TemplateIncident { get; set; }
    //Some props are omitted for simplicity    
    [Display(Name = "Next runtime")]
    [DataType(DataType.DateTime)]
    public virtual DateTime? NextExecuteAfterDate { get; set; }
}

возможно, это работает и с EF

...