質問: 今ではEF6 Alphaを使用しています。移行を使用すると、__MigrationHistoryテーブルに新しい移行ログが追加されます。 EF6では、__MigrationHistoryテーブルに「ContextKey」という新しい列があります。テストの後、私は2つのデフォルトの "ContextKey"値があることがわかりました: 1. DbContextの派生クラスのフルネーム。コードを実行すると次のようになります。 ``` Database.CreateIfNotExists(); ``` 2. DbMigrationsConfigurationの派生クラスのフルネーム。これは私がコードを実行すると発生します: ``` public ArticleDbContext() { Database.SetInitializer(new MigrateDatabaseToLatestVersion()); } ``` 私は初めてアプリケーション "Database.CreateIfNotExists();を実行する私のために新しいデータベースを作成し、ArticleDbContextで定義されたモデルにマップするすべてのテーブルも作成し、ContextKeyの値が「Module.Article.Model.ArticleDbContext」である__MigrationHistory行を追加します。 そして、 "Database.SetInitializer(new MigrateDatabaseToLatestVersion());"このコードは新しいContextKey "PowerEasy.Module.Article.Migrations.ArticleConfiguration"を生成します。 MigrationこのContextKeyを使用して__MigrationHistoryテーブルを照会し、データがないことを確認します。つまり、ArticleDbContextで定義されたモデルにマップされているすべてのテーブルが作成されますが、テーブルはすでにデータベースに存在しているため、例外がスローされ、「テーブルXXXは既に存在しています。 どうすればこの問題を解決できますか?
回答: MigrationsとDatabase.CreateIfNotExistsメソッド(またはその上に構築された初期化子)を混在させないでください。データベースが存在しない場合は、マイグレーションによってデータベースが作成されます。 移行初期化プログラムの代わりに 、 DbMigrator.Updateメソッドを使用して移行を適用することもできます。これは、イニシャライザによってトリガされる前にデータベースを作成/更新する場合に便利です。