2

私は移行を使用してエンティティ フレームワーク コードの最初の 4.3 を使用してプロジェクトに取り組んでいます。ローカルで実行する場合、web.config はCreateDatabaseIfNotExists<DataContext>、開発データベースにテスト データをシードするだけでなく、最初の実行時にさまざまな「静的」ルックアップ テーブル データを設定するデータベース イニシャライザーをターゲットにするように構成されます。

開発データベースが作成されると、データベースへのその後の変更は、プロジェクトに移行を追加し、'updata-database' PS コマンドでデータベースを更新することで完了します。

プロジェクトに満足したら、webdeploy を使用してコードをデプロイしますが、webdeploy には移行テーブルが含まれていないため、データベースを手動でコピーします。展開するときは、web.config 変換を使用して、.xml を実装する新しいデータベース初期化子を設定しますMigrateDatabaseToLatestVersion<DataContext>。これにより、後でデプロイされた新しいコードベースの移行が適用されます。これはすべてうまく機能していますが、これがテスト データだけでなく、アプリケーションの実行に必要なデータを使用してデータベースを初期化するための最良の方法であるかどうかについて懸念があります。私が探しているのは、最初のシード データを作成するのに良い方法CreateDatabaseIfNotExists<DataContext>です。構成クラスにシード メソッドがあることは認識していますが、移行のたびにデータベースを更新しているため、これは望ましい解決策ではありません。

プロジェクトはTFSにあり、時々、このプロジェクトの新しいブランチを作成する必要があります。これは本質的に最初のクローンです。これを初めてローカルで実行するとき、データベースはまだ存在しませんが、前述のように作成およびシードされます。現在の最大の問題は、以前に移行によって処理されたスキーマの変更が、データベースが初めて作成されたときに適用されるようになったことです。次に、新しい移行ファイルを追加して「update-database」を実行しようとすると、データベースの作成時に変更が既に適用されているため、以前の移行を実行できないため、壁にぶつかります。ここで何か間違ったことをしている、または単にトリックを逃したとしか想像できません。

結論として、私はに関する情報を探しています

  1. 移行を使用して初めてデータベースを作成するときに、初期テスト データと必要なアプリケーション データをシードする最良の方法。
  2. コードの移行を含むプロジェクトを分岐し、初めてデータベースを作成する必要がある場合の問題を解決する最善の方法。

読んでくれてありがとう。

4

2 に答える 2

1

移行を使用して初めてデータベースを作成するときに、初期テスト データと必要なアプリケーション データをシードする最良の方法。

移行構成にはSeed、まさにこの問題を解決するための方法があります。このメソッドでは、AddOrUpdate拡張メソッドを使用してコア データを初期化できます。拡張メソッドは、最初にレコードがデータベースに既に存在するかどうかを確認し、それを更新するか、新しいレコードを挿入します。

于 2012-04-19T09:55:20.077 に答える