Код Entity Framework сначала с DbUp

Я думаю об использовании Entity Framework 6Code First для взаимодействия с базой данных вместе DbUp для обновления схемы базы данных. Дело в том, что я не хочу использовать EF миграция по причинам. Итак, рабочий процесс, который я достиг:

  1. Изменить модель (добавить POCOs, изменить свойства и т. д.)
  2. Бежать Add-Migration temp_file в Visual Studio Package Manager Console
  3. Бежать Update-Database -Script в Visual Studio Package Manager Console
  4. Захватить сгенерированный sql скрипты, включая вставку новой строки в таблицу __MigrationHistory
  5. Создать новый .sql файл и мимо сгенерированных скриптов
  6. удалять temp_file
  7. Запустите DbUp

Он отлично работает локально и на рабочем сервере, однако мне неудобно добавлять, а затем удалять temp_file каждый раз, когда генерируется новая миграция (хотелось бы, чтобы был способ навсегда остановить temp_file добавляется в решение.).

Итак, вопрос: есть ли лучший способ выполнить миграцию базы данных с DbUp с помощью Entity Framework?

2 ответа

Решение

В большинстве случаев вы можете пропустить шаги (2) и (6), используя автоматический код первой миграции:

Автоматическая миграция позволяет использовать Code First Migrations без наличия файла кода в вашем проекте для каждого внесенного вами изменения.

По умолчанию автоматические миграции отключены. Вы можете включить их, добавив следующее, как в конструкторе класса конфигурации переноса БД (обычно называется Configuration и расположен под Migrations подпапка):

AutomaticMigrationsEnabled = true;

Некоторые вещи для рассмотрения:

  • Документация утверждает, что автоматические миграции имеют ограничения, так что имейте это в виду.
  • Вы можете смешивать автоматическую миграцию и миграцию на основе кода (другими словами, предлагаемый и ваш текущий подходы).
  • Преимущества вашего текущего подхода в том, что вы можете просмотреть, как EF интерпретирует изменения вашей модели, а также добавить / удалить / изменить части кода миграции.
  • Автоматические миграции не поддерживаются (не существуют) в EF Core, поэтому в проектах EF Core вы должны использовать что-то похожее на ваш текущий подход, за исключением того, что вы должны сохранять сгенерированные файлы кода миграции.

Может быть, этот ответ слишком поздно, но, возможно, он будет также полезен. Я полностью понимаю ваш подход к использованию Entity Framework в качестве ORM и другого инструмента для миграции схемы. Но выбор DbUp требует, чтобы вы писали SQL вручную или генерировали их, как описано выше. Я предлагаю рассмотреть возможность использования FluentMigrator вместо DbUp. Он придерживается той же философии, но позволяет писать шаги миграции в C# с использованием свободного синтаксиса. Кроме того, он поддерживает понижения, т. Е. Откат.

Вот пример:

[Migration(1)]
public class CreateUserTable : Migration
{
    public override void Up()
    {
        Create.Table("Users");
    }

    public override void Down()
    {
        Delete.Table("Users");
    }
}
Другие вопросы по тегам