私はエンティティフレームワークのコードを最初に使用しているプロジェクトで作業しています。 私のweb.configがローカルで実行されているときに、CreateDatabaseIfNotExists<DataContext>
を実装しているデータベース初期化ツールを対象にしています。テストデータで開発データベースをシーズニングしますが、初めて実行時にさまざまな '静的'ルックアップ可能データを入力します。エンティティフレームワークの移行を使用するプロジェクトのシードとブランチ
開発データベースが作成されると、それ以降のデータベースへの変更はプロジェクトへの移行を追加し、 'updata-database' PSコマンドを使用してデータベースを更新します。
私はプロジェクトに満足していますが、webdeployでコードを配備しますが、webdeployには移行テーブルが含まれていないため、データベースを手動でコピーします。デプロイするときには、web.configトランスフォームを使用して、MigrateDatabaseToLatestVersion<DataContext>
を実装する新しいデータベースイニシャライザを設定します。これにより、その後に展開される新しいコードベースの移行が適用されます。 これはすべて正常に動作しますが、これはテストデータだけでなくアプリケーションを実行するために必要なデータも含めてデータベースを初期化する最良の方法であるかどうかという懸念があります。 私が探しているのは、最初のシードデータをCreateDatabaseIfNotExists<DataContext>
にフックせずに、Migrateにフックするだけの良い方法です。 設定クラスにシードメソッドがありますが、すべての移行でデータベースを更新しているので、これは望ましい解決策ではありません。
プロジェクトはTFSにあり、時々私はエッセンスであるこのプロジェクトの新しいブランチを作成する必要があります最初のクローンです。これを初めてローカルに実行すると、データベースはまだ存在しませんが、前述のように作成され、シードされます。今最も大きな問題は、データベースが初めて作成されたときに、以前に移行によって処理されたスキーマの変更が適用されることです。新しい移行ファイルを追加して 'update-database'を実行しようとすると、データベースが作成されたときにこれらの変更が既に適用されていたため、以前の移行を実行できなくなりました。私はここで何か間違っているとか、単にトリックを逃したと想像することしかできません。
結論として、私は、最初のテストデータをシードする&必要なアプリケーションデータを移行を使用して最初にデータベースを作成するときに
- 最良の方法に関する情報を探しています。
- コード移行を含むプロジェクトを分岐してデータベースを初めて作成するときの問題を克服する最善の方法。
お読みいただきありがとうございます。 の移行を使用して最初にデータベースを作成する際に最初の試験データを&必要なアプリケーションデータをシードする
私は上記のシードメソッドを知っています。それを使用することで私の懸念は、移行が実行されるたびに実行されることです。 私の最初のコアデータの一部は、アプリケーションの実行中に変更される可能性があります。新しいマイグレーションが追加された場合にリセットしたくありません。 Seedメソッドを構成クラスにラップして 'InitialCreate'マイグレーションでのみ実行できるようにする方法があれば、これはうまくいくと思いますが、これを行うには良い方法が見つかりませんでした。 – Drauka
'Seed'メソッドの呼び出しが再現可能であることを確認するのはあなたの責任です - ' AddOrUpdate'がそれを助けることができます。マイグレーション時にカスタムシーディングSQL文を直接 'Up'メソッドに追加することができない場合は、 –
私はあなたが言っていることを理解していますが、エンティティフレームワークを使用する多くの理由の1つは、比較的複雑なSQL挿入ステートメントを書く必要を避けることでした。文脈を通じて播種するのではなく、私は別の解決策に取り組んでいます。 – Drauka