나는 공식 asp.net "MVC 4를 사용하여 EF 5 시작하기"를 따르고 있습니다. 이 튜토리얼에서 데이터베이스는 마이 그 레이션이 수행 될 때 생성된다 (필자의 이해에서). Mvc 5 튜토리얼로 EF 5를보고있을 때 데이터베이스를 만들기 위해 마이그레이션을 사용하지 않았습니다. 그들은 데이터베이스 이니셜 라이저를 사용합니다. 그래서 EF 5에서 마이그레이션을 사용하지 않고 프로젝트 데이터베이스를 만들 수 있는지 궁금합니다. 또한 이러한 두 가지 접근 방식의 차이점은 무엇입니까?EF5에서 마이그레이션하지 않고 데이터베이스를 만들 수 있습니까?
답변
먼저 코드 마이 그 레이션 및 패키지 관리자 콘솔 명령 사용 업그레이드를 수행하는 명령은 처음에는 다소 혼란 스러울 수 있습니다. 당신은 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
.
- 1. db/schema.rb를 재 구축하여 마이그레이션하지 않고 여러 데이터베이스를 포함 할 수 있습니까?
- 2. 테이블을 만들지 않고 Sqlite 데이터베이스를 만들 수 있습니까?
- 3. EF5에서 MVC5로 Db를 업데이트하십시오.
- 4. 마이그레이션하지 않고 EF 코어에서 모델 변경시 데이터베이스 삭제
- 5. 마이그레이션하지 않고 코어 데이터 모델 바꾸기
- 6. MongoDB를 사용하여 관계형 데이터베이스를 만들 수 있습니까?
- 7. MySQL은 점으로 데이터베이스를 만들 수 있습니까?
- 8. PHP에서 PDO를 사용하여 데이터베이스를 만들 수 있습니까?
- 9. 어떻게 속편으로 데이터베이스를 만들 수 있습니까?
- 10. 암호화 된 Sqlite 데이터베이스를 만들 수 있습니까?
- 11. PHP에서 자체 데이터베이스를 만들 수 있습니까?
- 12. MySQL 데이터베이스를 어떻게 만들 수 있습니까?
- 13. sqlite3 데이터베이스를 스레드로부터 안전하게 만들 수 있습니까?
- 14. 파일을 마이그레이션하지 않고 도메인 만 변경하는 방법
- 15. firebase로 마이그레이션하지 않고 google-services.json을 얻는 방법
- 16. PostgreSQL을 사용할 때 역할이 존재하지 않고 데이터베이스를 만들 수 없습니다.
- 17. 마이그레이션하지 않고 모델을 사용 하시겠습니까? (그냥 데이터베이스에서 선택)
- 18. 마이그레이션하지 않고 앱 업데이트에서 핵심 데이터 데이터베이스 업데이트
- 19. openOr 데이터베이스를 만들 수 없습니다.
- 20. phpmyadmin - 데이터베이스를 만들 수 없습니다.
- 21. SQLite 데이터베이스를 만들 수 없습니다.
- 22. 구성 데이터베이스를 만들 수 없습니다 ...?
- 23. 하이브로 데이터베이스를 만들 수 없습니다
- 24. 서버에 데이터베이스를 만들 수 없습니다.
- 25. Nitrous.io에서 데이터베이스를 만들 수 없습니다.
- 26. acts_as_commentable 업데이트하지 않고 만들 수 있습니까?
- 27. EF5에서 DbSet.Add를 취소하는 방법
- 28. 장치에 MongoDB를 설치하지 않고 MongoDB 데이터베이스를 사용하여 C# WinForms 응용 프로그램을 만들 수 있습니까?
- 29. DBCA를 사용하여 데이터베이스를 만들 수 없습니다.
- 30. 토큰 데이터베이스를 만들 때 알 수 없음
답장을 보내 주셔서 감사합니다. 그것은 나를 많이 도왔다. AutomaticMigrationEnabled가 true로 설정된 경우의 차이점은 무엇입니까? false로 설정하면 어떻게됩니까? 그게 무슨 차이가 있니? –
모델을 변경하여 시험해보십시오. 이러한 기능을 테스트하는 것이 편안함을 느끼는 가장 좋은 방법입니다. 매우 빠른 검색을 추가하면 http://stackoverflow.com/questions/11806570/automaticmigrationsenabled-false-or-true를 찾을 수 있습니다. –