Код Entity Framework сначала с DbUp
Я думаю об использовании Entity Framework 6
Code First
для взаимодействия с базой данных вместе DbUp
для обновления схемы базы данных. Дело в том, что я не хочу использовать EF
миграция по причинам. Итак, рабочий процесс, который я достиг:
- Изменить модель (добавить
POCO
s, изменить свойства и т. д.) - Бежать
Add-Migration temp_file
вVisual Studio Package Manager Console
- Бежать
Update-Database -Script
вVisual Studio Package Manager Console
- Захватить сгенерированный
sql
скрипты, включая вставку новой строки в таблицу__MigrationHistory
- Создать новый
.sql
файл и мимо сгенерированных скриптов - удалять
temp_file
- Запустите 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");
}
}