Как исправить ошибку преобразования datetime2 вне диапазона, используя DbContext и SetInitializer? - PullRequest
126 голосов
/ 19 мая 2011

Я использую API-интерфейсы DbContext и Code First, представленные в Entity Framework 4.1.

Модель данных использует базовые типы данных, такие как string и DateTime.В некоторых случаях я использую только аннотацию данных [Required], но это не относится ни к одному из свойств DateTime.Пример:

public virtual DateTime Start { get; set; }

Подкласс DbContext также прост и выглядит следующим образом:

public class EventsContext : DbContext
{
    public DbSet<Event> Events { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Event>().ToTable("Events");
    }
}

Инициализатор устанавливает даты в модели наразумные значения в этом или следующем году.

Однако, когда я запускаю инициализатор, я получаю эту ошибку в context.SaveChanges():

Преобразование типа данных datetime2 втип данных datetime привел к значению вне допустимого диапазона.Утверждение было прекращено.

Я не понимаю, почему это вообще происходит, потому что все так просто.Я также не уверен, как это исправить, так как нет файла edmx для редактирования.

Есть идеи?

Ответы [ 13 ]

0 голосов
/ 04 июня 2019

Одна строка исправляет это:

modelBuilder.Properties<DateTime>().Configure(c => c.HasColumnType("datetime2"));

Итак, в своем коде я добавил:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Properties<DateTime>().Configure(c => c.HasColumnType("datetime2"));
}

Добавление одной строки в переопределение подкласса DBContext void Раздел OnModelCreating должно работать.

0 голосов
/ 07 апреля 2017

Сначала я использую базу данных, и когда со мной произошла эта ошибка, я решил использовать ProviderManifestToken = "2005" в файле edmx (чтобы модели были совместимы с SQL Server 2005).Не знаю, возможно ли что-то подобное для Code First.

0 голосов
/ 27 февраля 2016

В моем случае это произошло, когда я использовал сущность, и таблица sql имеет значение по умолчанию datetime == getdate ().так что я сделал, чтобы установить значение для этого поля.

...