2012-07-07 2 views
0

엔티티 프레임 워크를 자동 마이그레이션으로 작동 시키려면 어떻게해야합니까? 내가 원하는 : 그것은 MVC3 코드 우선 : 마이 그 레이션 및 데이터베이스 생성

  • 데이터베이스 존재 나던 때

    • 데이터베이스가 자동으로 업데이트하기 위해 자동으로 생성되는 모델은 내가 DbMigrator를 사용하고 후자의

    를 변경하는 경우. 내가 그것을 모든 요청을 실행하지 않으 오히려 천천히, 그리고 그것을 위해 Application_Start에서 질수 있도록도 나는이 같은으로 session_start에 넣어 이유입니다 같은 응용 프로그램에서 여러 데이터베이스가 있습니다

    if (Session["started"] == null) 
        { 
         // this takes care of any database updates that might be necessary. 
         MigrationConfiguration configuration = new MigrationConfiguration(); 
         DbMigrator migrator = new DbMigrator(configuration); 
         List<string> pm = migrator.GetPendingMigrations().ToList(); 
         if (pm.Count > 0) 
         { 
          migrator.Update(); 
         } 
        } 
        else 
        { 
         Session["started"] = "started"; 
        } 
    

    이 작업을 수행하는 올바른 방법인지는 확실하지 않지만 제대로 작동하는 것처럼 보일 수 있습니다. 그러나 데이터베이스가 존재하지 않으면 실제로 데이터베이스를 생성하지 않습니다. 그것은 내가 가진

    "로그인에서 요청한"A "열 수 없습니다 데이터베이스"DB를 나에게주는이 다음과 같이 이전 작업 :

    Database.SetInitializer<DbContext>(new InitializerIfModelChange()); 
    

    이 데이터베이스를 삭제 하 고 때를 위해 괜찮 종자 데이터를 생성 데이터베이스가 존재하지 않지만 또한 데이터베이스가 변경되면 트리거됩니다 (어떤 경우에는 DbMigrator가 처리하려고합니다) 이것은 Application_Start에 있었지만 이전에는 무엇을해야할지 모르겠습니다. DbMigrator와 충돌 할까 봐 걱정됩니다. 앞에서 설명한 두 가지를 달성하기 위해이 모든 것을 어떻게 설정합니까?

  • 답변

    1

    데이터베이스를 변경해야 할 때마다 수동으로 패키지 관리자에서 Update-Database을 실행합니다. 처음에는 데이터베이스를 만들었지 만 지금은 주석으로 처리 한 것처럼 Database.SetInitializer을 사용했습니다.

    자세한 내용은 Entity Framework 4.3 Automatic Migrations Walkthrough을 참조하십시오.

    원하는대로 작동해야합니다. 새 데이터베이스를 만들어야하는 경우 Database.SetInitializer<NewDBContext>(new NewDBInitializer());을 추가하고 빌드하고 실행하십시오. 그런 다음 주석을 달아서 나중에 모델 변경시 실행되지 않고 대신 패키지 관리자에서 Update-Database 명령을 사용하십시오.

    관련 문제