Подтвердить что ты не робот

Можем ли мы запустить скрипт SQL, используя код первой миграции?

Можем ли мы запустить скрипт sql, используя код первой миграции?

Сначала я новичок в коде, и если я хочу сохранить свои изменения в файле сценария SQL перед командой переноса update-database, возможно ли это?

Если возможно, пожалуйста, предоставьте шаги, чтобы сделать это. Кроме того, если сценарий сгенерирован, то возможно ли запустить этот сценарий с помощью миграции?

4b9b3361

Ответ 1

Сначала вам нужно создать миграцию.

Add-Migration RunSqlScript

Затем в сгенерированном файле миграции вы можете написать свой SQL.

// PLAIN SQL
Sql("UPDATE dbo.Table SET Created = GETDATE()");

// FROM FILE
var sqlFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Custom.sql"); 
Sql(File.ReadAllText(sqlFile));

Затем вы запустите

Update-Database

Ответ 2

Что мне нравится делать, так это вставлять скрипт SQL как ресурс в сборку и использовать метод SqlResource. Я протестировал этот подход с Visual Studio 2017 15.5.6.

Сначала вам нужно создать файл миграции:

  1. В Visual Studio обязательно установите в качестве начального проекта проект, в котором определен ваш DbContext
  2. В Visual Studio откройте PMC: Вид → Другие окна → Консоль диспетчера пакетов.
  3. В PMC Установите проект по умолчанию для проекта, который содержит DbContext
  4. Если у вас установлено ядро EF и EF 6.x:

    EntityFramework\Add-Migration RunSqlScript

  5. Если у вас установлен только EF 6.x:

    Add-Migration RunSqlScript

Добавьте Sql Script в папку миграции (я называю его тем же префиксом, что и файл миграции)

Migration folder in the Solution Explorer

В окне "Свойства файла" убедитесь, что действие "Построение" имеет значение "Встроенный ресурс". Обратите внимание, что нам не нужно копировать в выходную папку, поскольку сценарий sql будет встроен в сборку.

Обновите метод Up в миграции RunSqlScript

public override void Up()
{
    string sqlResName = typeof(RunSqlScript).Namespace  + ".201801310940543_RunSqlScript.sql";
    this.SqlResource(sqlResName );
}

надеюсь, это поможет

Ответ 3

Подобно SQL, у нас есть другой метод SqlFile. вы можете напрямую использовать это.

Ответ 4

Для .NET Core и EF Core вы можете сделать что-то подобное в процессе миграции

protected override void Up(MigrationBuilder migrationBuilder)
{
   var schema = "starter_core";
   migrationBuilder.Sql($"INSERT INTO [{schema}].[Roles] ([Name]) VALUES ('transporter')");
}