2016-09-27 2 views
0

두 개의 웹 애플리케이션이 있습니다. 둘 다 동일한 데이터베이스를 참조하고 두 앱의 이전을 구성해야합니다. 두 응용 프로그램 모두 MigrateDatabaseToLatestVersion을 설정합니다. 빈 데이터베이스 응용 프로그램으로 시작하면 먼저 __MigrationHistory의 스키마를 만들고이 레코드를 만듭니다. 모든 것이 정상입니다. 하지만 두 번째 응용 프로그램을 시작하면 기존 데이터베이스 테이블을 변경해야하지만 응용 프로그램이 "...이 테이블이 이미 있습니다"라는 오류로 인해 충돌이 발생합니다. 이 문제를 해결하는 방법? 코드 두 번째 응용 프로그램의MigrateDatabaseToLatestVersion을 사용하여 두 개의 웹 애플리케이션에서 마이그레이션

예 작동하지 않을 것

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

. 하나의 앱에서 모델을 수정하면 이전 마이그레이션 (코드)을보고 비교할 수 있습니다. 다른 앱에서 변경 한 내용을 다시 만들려고 시도하거나 모델 불일치 오류가 발생합니다.

최상의 솔루션은 한 응용 프로그램에서 모델을 유지 관리하는 것입니다. 그렇지 않으면 동기화를 유지하기 위해 다른 응용 프로그램에서 마이그레이션을 만들어야 할 것입니다 :이 있다고 앱 2에서 보류중인 변경 모델의 경우 Entity Framework Under the Hood

를 참조하지

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

당신은 조심해야합니다 공유되지 않는 경우 두 앱에 초기 마이그레이션 시작 지점을 만들어야합니다.

add-migration Initial -IgnoreChanges