EF移行はうまく機能していますが、DbMigrationsConfigurationクラスからシードデータのSQLスクリプトも生成したいと思います。Update-Databaseを実行するとシードデータは正常に実行されますが、UpdateDatabase -Scriptを実行すると、シード挿入のSQLが取得されません。通常のUpdate-Databaseで-Verboseを試しましたが、シードステートメントの出力も表示されません。
これは可能ですか?
EF移行はうまく機能していますが、DbMigrationsConfigurationクラスからシードデータのSQLスクリプトも生成したいと思います。Update-Databaseを実行するとシードデータは正常に実行されますが、UpdateDatabase -Scriptを実行すると、シード挿入のSQLが取得されません。通常のUpdate-Databaseで-Verboseを試しましたが、シードステートメントの出力も表示されません。
これは可能ですか?
いいえ、できません。構成クラスは移行自体の一部ではなく、移行を実行するインフラストラクチャです。すべての移行に対して単一の構成クラスがあり、そのSeed
メソッドはすべての移行実行後に実行されます-データのシードにコンテキストを使用することもできます。そのため、このメソッドは移行の完了後に実行されます=移行の一部にすることはできません。移行クラスのコンテンツのみがスクリプト化されます。
別の解決策/回避策は、SSMSにスクリプトを生成させることです。
1)DB初期化子とシードメソッドによって生成されたクリーンなデータベースから始めます。スクリプト化するデータがそこにあることを確認してください。
2)SSMSを使用して、データベースを右クリックし、[タスク]> [スクリプトの生成...]に移動して、ウィザードに従います。[詳細オプション]で、[スクリプトを作成するデータの種類]で[データのみ]を選択してください。
3)生成されたスクリプトから、必要なシードステートメントをターゲットスクリプトにコピーします。
私はそれが少し古いスレッドであることを知っていますが、ここに答えを探している他の誰かを助けることができる答えがあります。
EntityFrameworkが提供するMigrate.exeを使用できます。これにより、データベースコンテキストでSeedメソッドを実行できるようになります。
特定のSeedメソッドを実行する必要がある場合は、次のように別の移行構成ファイルに配置できます。
Enable-Migrations -MigrationsDirectory "Migrations\ContextA" -ContextTypeName MyProject.Models.ContextA
指示:
Migrate.exe MyAssembly CustomConfig /startupConfigurationFile=”..\web.config”
NuGetパッケージディレクトリでそれを探します: ".. \ packages \ EntityFramework.6.1.3 \ tools"
移行構成を引数として指定できます。CustomConfig
には、コードベースのシードメソッドが含まれている必要があります。したがって、この方法では、移行からSQLスクリプトを生成する必要はありません。
詳細はこちら:
http://www.eidias.com/blog/2014/10/13/initialcreate-migration-and-why-is-it-important
http://www.gitshah.com/2014/06/how-to-run-entity-framework-migrations.html
このソリューションを使用すると、SQLスクリプトを生成する必要がなく、さまざまな環境で複数のシードを実行できます。