Как запустить сценарий миграции SQL с помощью Entity Framework Core

я столкнулся с проблемой, когда я не могу достичь сценария SQL для применения миграции. Вот мой миграционный код:

 public partial class AddSomethingMigration : Migration
{
    private const string MIGRATION_SQL_SCRIPT_FILE_NAME = @"MigrationsScripts170710123314_AddSomethingMigration.sql";

    protected override void Up(MigrationBuilder migrationBuilder)
    {
        string sql = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, MIGRATION_SQL_SCRIPT_FILE_NAME));
        migrationBuilder.Sql(File.ReadAllText(sql));
    }
}

поэтому, когда я использую консоль диспетчера пакетов на локальном компьютере, все работает нормально. Но когда я развертываю в среде, я получаю несоответствие в файле.

могу ли я запускать статические сценарии SQL через миграцию EF автоматически вообще, или я должен вставить SQL-запрос в коде?

1 ответов


Я нашел несколько ответов на этот вопрос.

  1. добавить скрипты в качестве ресурсов проекта и использовать его как:

        string sql = Resources._20170630085940_AddMigration;
        migrationBuilder.Sql(sql);
    

этот вариант не так хорош, потому что .sql будет встроен в сборку.

  1. Если вы используете проекты Net Core С.структура csproj, вы можете добавить itemgroup в xml:

    <ItemGroup> <Content Include="Migrations\**\*.sql" CopyToPublishDirectory="PreserveNewest" /><!-- CopyToPublishDirectory = { Always, PreserveNewest, Never } --></ItemGroup>
    

и затем укажите путь к файлу типа:

Path.Combine(AppContext.BaseDirectory, relativePath)