Я использую EF.Core с миграцией кода сначала для обновления базы данных SQL.
Всякий раз, когда я добавляю миграции (Консоль диспетчера пакетов: add-migration
), я обновляю базу данных с помощью известной команды update-database
. Есть ли способ запустить пакетный сценарий SQL после выполнения этой команды автоматически (как вы можете сделать с событиями после сборки в Visual Studio)?
Этот сценарий может создавать резервные копии базы данных или выполнять другие задачи (например, настройку ролей пользователей и т. д.).
Я не хочу изменять существующие миграции для этого, я знаю, что вы можете добавить что-то вроде
protected override void Up(MigrationBuilder migrationBuilder)
{
var sqlFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
@"Migrations\20200701103006_MySQLBatch_Up.sql");
var sqlCommands = System.IO.File.ReadAllText(sqlFile);
migrationBuilder.Sql(sqlCommands);
// ...
}
Но я не хочу этого делать, потому что таким образом вам придется делать это каждый раз, когда вы добавляете новую миграцию.
Есть ли событие или метод, который можно переопределить для его достижения? Или что-то, что можно запустить, например скрипт?
По сути, я хочу добиться наличия сценария или метода, вызывающего:
update-database
pg_dump -h localhost -U postgres -p 5432 myDatabase > C:\Temp\myDatabase.sql
Примечание: update-database запускается в контексте диспетчера пакетов, pg_dump запускается в командной оболочке (cmd.exe), поэтому вы не можете запускать update-database напрямую в сценарии .cmd или .bat.
pg_dump -h localhost -U postgres -p 5432 myDatabase > C:\Temp\myDatabase.sql
, который создает файл SQL со структурой и данными, которые я могу передать администратору базы данных. В идеале это должно срабатывать сразу после успешного завершенияupdate-database
. В случае ошибок миграции он не должен запускаться. - person Matt   schedule 03.08.2020