1

私のプロジェクトでは、現在のアプローチは、データベースがまだ存在しない場合は、データベースを作成しCreateDatabaseIfNotExists、そこから初期データをシードすることIntializerです。また、エンティティ 4.4 へのアップグレード後に Code First Migration のサポートを追加しました。これにより、将来、モデル/データベース構造を変更するときに、既存のデータベースを削除せずにクライアント側のデータベースを更新できます。

ただし、うまく機能していないようです。たとえば、フォームが読み込まれず、エラーメッセージがThe model backing the 'myEntities' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).. しかし、モデルとデータベースは確かに更新されたバージョンです。Migration は によって生成されたデータベースを認識しなかったようですCreateDatabaseIfNotExistsが、同時に実行時にすべてがうまく機能しているようです。

また、その後CreateDatabaseIfNotExists、データベースを初期化すると、Add-migrationその後失敗して文句を言いpending migrationupdate-database. を実行しようとするとupdate-database、移行パスはデータベースが初期セットアップ状態にあると想定しているように見え、すべての移行スクリプトを実行しようとしますが、によって生成されたデータベースCreateDatabaseIfNotExistsは実際に現在と同期しているため、実行する必要はありません。モデルであり、まったく移行しないでください。

4

1 に答える 1

0

MigrationHistorySystem Tables にテーブルがあることを発見しました。そのテーブルは、イニシャライザが であるCreateDatabaseIfNotExistsかであるかに関係なく、データベースの初期化履歴を常に保存しますMigrateDatabaseToLatestVersion。違いは、データベースがCreateDatabaseIfNotExists1, everytime the database initialized, the migriationId for that initialize record will be different, butMigrateDatabaseToLatestVersion` によって初期化される場合、移行ステップごとに常に同じ一連の migrationId が保存されることです。それがEntity Framework 5.0の仕組みだと思います。

結局、私は DB Access コードをあきらめて書き直して、CreateDatabaseIfNotExistsまたは Migration sConfiguration` クラスではなく、コードの他の部分に初期データベース データをシードするようにしました。

于 2012-09-10T20:59:21.790 に答える