2013-11-28 1 views
1

나는 공식 asp.net "MVC 4를 사용하여 EF 5 시작하기"를 따르고 있습니다. 이 튜토리얼에서 데이터베이스는 마이 그 레이션이 수행 될 때 생성된다 (필자의 이해에서). Mvc 5 튜토리얼로 EF 5를보고있을 때 데이터베이스를 만들기 위해 마이그레이션을 사용하지 않았습니다. 그들은 데이터베이스 이니셜 라이저를 사용합니다. 그래서 EF 5에서 마이그레이션을 사용하지 않고 프로젝트 데이터베이스를 만들 수 있는지 궁금합니다. 또한 이러한 두 가지 접근 방식의 차이점은 무엇입니까?EF5에서 마이그레이션하지 않고 데이터베이스를 만들 수 있습니까?

답변

6

먼저 코드 마이 그 레이션 및 패키지 관리자 콘솔 명령 사용 업그레이드를 수행하는 명령은 처음에는 다소 혼란 스러울 수 있습니다. 당신은 CreateDatabaseIfNotExists, DropCreateIfModelChanges, DropCreateDatabaseAlways에 이니셜을 사용하고 EF 그냥 가끔 당신을 위해 일을 표시하는 이유 MigrateDatabaseToLatestVersion
에 그래서이 인터페이스 IDatabaseInitializer<TContext>.

CreateDatabaseIfNotExists // is the Default initializer. 

을 볼 수 있습니다.

그래서 대답은 가 "YES 수행 할 수 있습니다"마이그레이션없이 데이터베이스 "

만들기입니다하지만 장기적으로는 또 다른 질문입니다. 는 마이그레이션을 사용하는 경우 할 것이다 경우의 차이는 명확하지 않다합니다.데이터베이스가 없다면 데이터베이스 생성을 의미합니다 자동화 된 마이그레이션과 CreateDB는 때때로 동일한 결과를 가져올 수 있기 때문에 혼란스럽게 보입니다.하지만 기술적으로는 다릅니다. .

그래서 일반적으로 충분하다. 코드를 처음으로 자동 "마이그레이션"만 사용하십시오.

마이그레이션은 자동 또는 "관리"일 수 있습니다. 관리되는 마이그레이션은 코드를 생성하고 코드를 조정하고 PM 커맨드 릿 또는 POwershell 명령을 실행하여 실제로 마이그레이션을 수행합니다.

자동 마이그레이션을 사용하면 intitializer를 설정하고 DBContext에 액세스하면됩니다.

두 부분으로 구성됩니다.

a) DB 초기화 프로그램 단계. YourDBContext를 인스턴스화하기 직전에이 작업을 수행하십시오. 마이그레이션 이니셜 라이저를 사용할 때 지정된

//eg 
// DONT TOUCH MY DB or i break your back! 
Database.SetInitializer(new ContextInitializerNone<YourDbContext>()); // Do Nothing, 
// OR 
// yes migrate my db to match my code please. 
Database.SetInitializer(new MigrateDatabaseToLatestVersion<YourDbContext, YourMigrationConfiguration>()); // Set to migration is requested, see config class below 

Confirguration 클래스는 필요할 때 그럼 그냥 코드에서 마이그레이션을 트리거이

public class YourMigrationConfiguration<TContext> : DbMigrationsConfiguration<TContext> 
    where TContext : DbContext{ 

    protected YourMigrationConfiguration() { 
     AutomaticMigrationsEnabled = true; // run it when needed. Do not wait for my PM Command 
     AutomaticMigrationDataLossAllowed = true; // if the new db look means dropping tables or columns go ahead and kill my data. So use this option with caution. 

    } 

것 같습니다.

Code first Db initialization strategies.

Context.Database.Initialize(true); // i place this inside a method on my UoW class 

이 주제에 웹에 많은 기사가 있습니다 Code first migrations recommended reading
Managed Migrations

.

+0

답장을 보내 주셔서 감사합니다. 그것은 나를 많이 도왔다. AutomaticMigrationEnabled가 true로 설정된 경우의 차이점은 무엇입니까? false로 설정하면 어떻게됩니까? 그게 무슨 차이가 있니? –

+0

모델을 변경하여 시험해보십시오. 이러한 기능을 테스트하는 것이 편안함을 느끼는 가장 좋은 방법입니다. 매우 빠른 검색을 추가하면 http://stackoverflow.com/questions/11806570/automaticmigrationsenabled-false-or-true를 찾을 수 있습니다. –

관련 문제