コードファースト移行を使用してSQLスクリプトを実行できますか?
私は最初にコードを書くのが初めてで、移行のupdate-databaseコマンドの前にSQLスクリプトファイルに変更を保存したい場合、それは可能ですか?
可能であれば、それを実行するための手順を提供してください。また、スクリプトが生成された場合、移行を使用してそのスクリプトを実行できますか?
まず、移行を作成する必要があります。
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
私がやりたいのは、SQLスクリプトをアセンブリにリソースとして埋め込み、SqlResource
メソッドを使用することです。 Visual Studio 2017 15.5.6でこのアプローチをテストしました。
まず、移行ファイルを作成する必要があります。
DbContext
が定義されているプロジェクトをスタートアッププロジェクトとして設定してください。EFコアとEF 6.xの両方がインストールされている場合:
EntityFramework\Add-Migration RunSqlScript
EF 6.xのみがインストールされている場合:
Add-Migration RunSqlScript
移行フォルダーにSqlスクリプトを追加します(移行ファイルと同じプレフィックスで名前を付けます)
[ファイルのプロパティ]ウィンドウで、ビルドアクションが[埋め込みリソース]であることを確認します。SQLスクリプトはアセンブリに埋め込まれるため、出力フォルダーにコピーする必要はありません。
RunSqlScript
移行のUpメソッドを更新します
public override void Up()
{
string sqlResName = typeof(RunSqlScript).Namespace + ".201801310940543_RunSqlScript.sql";
this.SqlResource(sqlResName );
}
これが役立つことを願っています
SQLと同様に、別のメソッドSqlFileがあります。それを直接使用できます。
.NET CoreおよびEF Coreの場合、移行でこのようなことができます
protected override void Up(MigrationBuilder migrationBuilder)
{
var schema = "starter_core";
migrationBuilder.Sql($"INSERT INTO [{schema}].[Roles] ([Name]) VALUES ('transporter')");
}