Entity Framework Code-First Migration не работает с SQL Server

c# entity-framework entity-framework-6

Вопрос

Используя Entity Framework 6 и SQL Server, я получаю следующую ошибку, когда EF выполняет миграцию:

Невозможно обновить базу данных в соответствии с текущей моделью, так как есть ожидающие изменения, и автоматическая миграция отключена. Либо записывайте ожидающие изменения модели в миграцию на основе кода, либо разрешайте автоматическую миграцию. Установите DbMigrationsConfiguration.AutomaticMigrationsEnabled в true, чтобы включить автоматическую миграцию.

Все работает отлично с MySQL.

Изменений не было. Запуск другой «Add-Migration» приводит к пустым методам Up () / Down ():

public partial class Two : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}

Класс DbMigrationsConfiguration :

public partial class Two : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}

DbContext.OnModelCreating :

public partial class Two : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}

Кроме того, изучение __MigrationHistory кажется, что все в порядке.

Что я делаю не так?

Обновление. Временное включение автоматических миграций, чтобы увидеть, какие изменения он внесет, изменяет все значения точности / шкалы времени столбца с 16/7 до 8/0. Я не понимаю, почему он создает их с одной точностью, а затем хочет, чтобы у них был другой, хотя ...

Обновление 2, запросы:

Вот запросы, которые создают соответствующие таблицы:

public partial class Two : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}

А вот вот запросы, сделанные автоматической миграцией:

public partial class Two : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}

Популярные ответы

Некоторые мысли: Date-precision - .NET / C # имеет DateTime, SQL-сервер имеет DateTime и DateTime2. Добавить конвенцию

public class DateTime2Convention : Convention
{
    public DateTime2Convention()
    {
        this.Properties<DateTime>()
            .Configure(c => c.HasColumnType("datetime2"));
    }
}

затем добавьте

public class DateTime2Convention : Convention
{
    public DateTime2Convention()
    {
        this.Properties<DateTime>()
            .Configure(c => c.HasColumnType("datetime2"));
    }
}

в

public class DateTime2Convention : Convention
{
    public DateTime2Convention()
    {
        this.Properties<DateTime>()
            .Configure(c => c.HasColumnType("datetime2"));
    }
}

Создайте аналогичный для Time, и это должно решить эту проблему.

Другая вещь, которая требуется, - это сгенерировать SQL-скрипт. Вам может потребоваться найти подпись (MigrationID) последнего обновления базы данных из таблицы __MigrationHistory и использовать ее для генерации скрипта с использованием

public class DateTime2Convention : Convention
{
    public DateTime2Convention()
    {
        this.Properties<DateTime>()
            .Configure(c => c.HasColumnType("datetime2"));
    }
}

или -Script использовать автоматические миграции.

Извините, это немного неоднозначный ответ, но я надеюсь, что вы пойдете.




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему