2012-11-14 4 views
1

이제 EF6 Alpha를 사용하고 있습니다. 마이그레이션을 사용하면 __MigrationHistory 테이블에 새로운 마이그레이션 로그가 추가됩니다.Entity Framework 6 코드 첫 번째 마이그레이션 ContextKey

EF6에서 __MigrationHistory 테이블에는 "ContextKey"라는 새 열이 있습니다. 내가 코드를 실행하면

  1. DbContext의 파생 class.This의 전체 이름이 발생 : 테스트 후, 나는 두 개의 기본 "ContextKey"가치가 발견

    Database.CreateIfNotExists(); 
    
  2. DbMigrationsConfiguration의의 전체 이름 파생 클래스. 내가 코드를 실행할 때이 문제가 발생 :

    public ArticleDbContext() 
    { 
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<ArticleDbContext, ArticleConfiguration>()); 
    } 
    

내가 응용 프로그램을 처음 실행 "Database.CreateIfNotExists을();" 저를 위해 새 데이터베이스를 만들고 ArticleDbContext에 정의 된 모델에 매핑되는 모든 테이블을 만든 다음 ContextKey 값이 "Module.Article.Model.ArticleDbContext"인 __MigrationHistory 행을 추가하십시오.

그리고 "Database.SetInitializer (new MigrateDatabaseToLatestVersion());" 이 코드는 새로운 ContextKey "PowerEasy.Module.Article.Migrations.ArticleConfiguration"을 생성합니다. Migration이 ContextKey가있는 __MigrationHistory 테이블을 쿼리하고 데이터가 없음을 확인합니다. 그래서 다시 ArticleDbContext에 정의 된 모델에 매핑되는 모든 테이블을 만들지 만 테이블은 이미 데이터베이스에 있으므로 예외가 throw되어 "테이블 XXX가 이미 존재합니다"라고 알려줍니다.

어떻게 해결할 수 있습니까?

답변

5

마이그레이션과 Database.CreateIfNotExists 메서드 (또는 위에 빌드 된 이니셜 라이저)를 함께 사용하지 마십시오. 데이터베이스가없는 경우 마이그레이션이 처리됩니다.

마이그레이션 초기화 프로그램 대신 DbMigrator.Update 메서드를 사용하여 마이그레이션을 적용 할 수도 있습니다. 이는 데이터베이스를 초기화/초기화하기 전에 데이터베이스를 작성/업데이트하려는 경우에 유용합니다.

+0

고맙습니다. 해결해 보았습니다. – RongieZeng

관련 문제