2016-09-27 15 views
0

私は2つのWebAppを持っています。 両方とも同じデータベースを参照し、両方のアプリケーションの移行を整理する必要があります。 両方のアプリケーションをMigrateDatabaseToLatestVersionに設定します。 空のデータベースアプリケーションを使い始めると、最初にスキームが作成され、テーブル__MigrationHistoryにはこれに関するレコードが作成され、すべてがOKです。 しかし、2番目のアプリケーションを起動するときに既存のデータベーステーブルを変更する必要がありますが、アプリケーションがクラッシュしてエラーが発生しました - "...このテーブルは既に存在しています" この問題を解決するには?MigrateDatabaseToLatestVersionを使用して2つのWebAppから移行

仕事に行くのではないのコード二アプリの例

Global.asaxの

Database.SetInitializer(new SyncContextInitializer());     
using (var context = new SyncDataContext())    
{     
    context.Database.Initialize(force: true); 

} 

public class SyncContextInitializer : MigrateDatabaseToLatestVersion<SyncDataContext, SyncConfiguration>  
{   } 

public class SyncDataContext : DataContext  
{    
    protected override void OnModelCreating(DbModelBuilder modelBuilder)   
    {    
     modelBuilder.Configurations.Add(new IdentityUserLoginMap());    
     .......   
     base.OnModelCreating(modelBuilder);   
    }  
} 

public sealed class SyncConfiguration : DbMigrationsConfiguration<SyncDataContext>   
{ 
     private readonly bool _pendingMigrations; 

    public SyncConfiguration()    
    {    
     AutomaticMigrationDataLossAllowed = true;       
     AutomaticMigrationsEnabled = true;    
     var migrator = new DbMigrator(this);    
     _pendingMigrations = migrator.GetDatabaseMigrations().Any(); 

    } 
    ...... 
    ..... 
} 
+0

データベースを削除して作成する必要がありますか? – Sampath

+0

いいえ、私はちょうど既に存在するテーブルのためのいくつかのフィールドを更新し、いくつかの新しいテーブルを作成する必要があります。 ModelBuilderに追加された更新クラスと新しいエンティティ – 3axap

+0

は、 'モデル変更の場合、データベースを削除して作成する '設定です。 – Sampath

答えて

0

。 1つのアプリケーションでモデルを修正すると、前のマイグレーション(コード内)を調べて比較します。それは、他のアプリケーションで行われた変更を再現しようとするか、モデルの不一致エラーが発生します。

最良の解決策は、1つのアプリケーションでモデルを維持することです。あなたが同期してそれを維持するために、他のアプリケーションに移行を作成する必要がありそうでない場合:

// Application 1: 
add-migration MyChanges 
update-database 
// Application 2: 
add-migration SyncMyChanges -IgnoreChanges // Just update meta model 
update-database 

あなたは、モデルの場合Entity Framework Under the Hood

を参照してください。2.アプリケーションには、保留中の変更がなかったことを世話をする必要があります共有されていない場合は、両方のアプリで最初の移行開始点を作成するだけでよい:

add-migration Initial -IgnoreChanges 
関連する問題