web-dev-qa-db-ja.com

Code First Migrationsを使用してSQLスクリプトを実行できますか?

コードファースト移行を使用してSQLスクリプトを実行できますか?

私は最初にコードを書くのが初めてで、移行のupdate-databaseコマンドの前にSQLスクリプトファイルに変更を保存したい場合、それは可能ですか?

可能であれば、それを実行するための手順を提供してください。また、スクリプトが生成された場合、移行を使用してそのスクリプトを実行できますか?

41
Manprit Singh

まず、移行を作成する必要があります。

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
67
Rikard

私がやりたいのは、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スクリプトを追加します(移行ファイルと同じプレフィックスで名前を付けます)

Migration folder in the Solution Explorer

[ファイルのプロパティ]ウィンドウで、ビルドアクションが[埋め込みリソース]であることを確認します。SQLスクリプトはアセンブリに埋め込まれるため、出力フォルダーにコピーする必要はありません。

RunSqlScript移行のUpメソッドを更新します

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

これが役立つことを願っています

23

SQLと同様に、別のメソッドSqlFileがあります。それを直接使用できます。

7

.NET CoreおよびEF Coreの場合、移行でこのようなことができます

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