Database.EnsureCreated 및 Database.Migrate를 어디에서 어떻게 호출합니까?
ASP.NET MVC 6 응용 프로그램이 Database.EnsureCreated
있고 및 Database.Migrate
메서드 를 호출해야 합니다.
하지만 어디로 전화해야합니까?
나는 이것이 중요한 질문이고 잘 대답되어야한다고 생각합니다!
Database.EnsureCreated 란 무엇입니까?
context.Database.EnsureCreated()
컨텍스트에 대한 데이터베이스가 존재하는지 확인하는 새로운 EF 핵심 방법입니다. 존재하는 경우 조치가 수행되지 않습니다. 존재하지 않는 경우 데이터베이스 및 모든 스키마가 생성되고이 컨텍스트의 모델과 호환되는지 확인합니다.
참고 : 이 방법은 마이그레이션을 사용하여 데이터베이스를 생성하지 않습니다. 또한 생성 된 데이터베이스는 나중에 마이그레이션을 사용하여 업데이트 할 수 없습니다. 관계형 데이터베이스를 대상으로하고 마이그레이션을 사용하는 DbContext.Database.Migrate()
경우이 방법을 사용하여 데이터베이스가 생성되고 모든 마이그레이션이 적용되는지 확인할 수 있습니다 .
EF 6으로 어떻게 했습니까?
context.Database.EnsureCreated()
EF 6의 아래 나열된 접근 방식과 동일합니다.
패키지 관리자 콘솔 :
Enable-Migrations -EnableAutomaticMigrations. 추가 마이그레이션 / 업데이트 데이터베이스.
코드에서 :
Database.SetInitializer CreateDatabaseIfNotExists
또는
DbMigrationsConfiguration을 사용하고 AutomaticMigrationsEnabled = true로 설정합니다.
Database.Migrate 란 무엇입니까?
컨텍스트에 대해 보류중인 마이그레이션을 데이터베이스에 적용합니다. 데이터베이스가없는 경우 생성합니다.
EF 6으로 어떻게 했습니까?
context.Database.Migrate()
EF 6의 아래 나열된 접근 방식과 동일합니다.
패키지 관리자 콘솔 :
업데이트-데이터베이스 -TargetMigration
사용자 지정 DbMigrationsConfiguration 사용 :
AutomaticMigrationsEnabled = false; 또는 DbMigrator와 함께.
결론 :
마이그레이션을 사용하는 경우 context.Database.Migrate()
. 마이그레이션을 원하지 않고 빠른 데이터베이스 (일반적으로 테스트 용) 만 원하는 경우 context.Database.EnsureCreated () / EnsureDeleted ()를 사용하십시오.
James P와 Bassam Alugili가 제공 한 정보를 사용하여 결국 다음 코드 줄을 클래스 ( Startup.cs ) 의 Configure
메서드에 추가했습니다 .Startup
using (var scope =
app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
using (var context = scope.ServiceProvider.GetService<MyDbContext>())
context.Database.Migrate();
앞서 언급 한 것처럼 Rowan Miller의 다음 내용을 읽어야 합니다 .
...
EnsureCreated
마이그레이션을 완전히 우회하고 스키마를 생성합니다. 마이그레이션과 혼합 할 수 없습니다.EnsureCreated
매번 데이터베이스를 삭제하고 다시 생성해도 괜찮은 테스트 또는 신속한 프로토 타이핑을 위해 설계되었습니다. 마이그레이션을 사용 중이고 앱 시작시 자동으로 적용되도록하려면context.Database.Migrate()
대신 사용할 수 있습니다 .
여기 에 대한 답변에 따르면 다음 항목에 추가 Globals.EnsureDatabaseCreated();
해야합니다 Startup.cs
.
Startup.cs의 시작 기능 :
public Startup(IHostingEnvironment env)
{
// Set up configuration sources.
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables();
if (env.IsDevelopment())
{
// This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
builder.AddApplicationInsightsSettings(developerMode: true);
}
Configuration = builder.Build();
Globals.Configuration = Configuration;
Globals.HostingEnvironment = env;
Globals.EnsureDatabaseCreated();
}
그리고 다음 Globals.EnsureDatabaseCreated()
과 같이 정의하십시오 .
public static void EnsureDatabaseCreated()
{
var optionsBuilder = new DbContextOptionsBuilder();
if (HostingEnvironment.IsDevelopment()) optionsBuilder.UseSqlServer(Configuration["Data:dev:DataContext"]);
else if (HostingEnvironment.IsStaging()) optionsBuilder.UseSqlServer(Configuration["Data:staging:DataContext"]);
else if (HostingEnvironment.IsProduction()) optionsBuilder.UseSqlServer(Configuration["Data:live:DataContext"]);
var context = new ApplicationContext(optionsBuilder.Options);
context.Database.EnsureCreated();
optionsBuilder = new DbContextOptionsBuilder();
if (HostingEnvironment.IsDevelopment()) optionsBuilder.UseSqlServer(Configuration["Data:dev:TransientContext"]);
else if (HostingEnvironment.IsStaging()) optionsBuilder.UseSqlServer(Configuration["Data:staging:TransientContext"]);
else if (HostingEnvironment.IsProduction()) optionsBuilder.UseSqlServer(Configuration["Data:live:TransientContext"]);
new TransientContext(optionsBuilder.Options).Database.EnsureCreated();
}
사용하려면 여기 또는 여기를context.Database.Migrate()
참조 하십시오 .
Additionally you may see a performance hit if you call this in the constructor of your context... After moving EnsureCreated
to the setup.cs utility, I noticed considerable improvements to my response times.
Note: I am using EFC and UWP.
ReferenceURL : https://stackoverflow.com/questions/38238043/how-and-where-to-call-database-ensurecreated-and-database-migrate
'UFO ET IT' 카테고리의 다른 글
Eclipse : 기존 소스 폴더를 추가하는 방법은 무엇입니까? (0) | 2020.12.31 |
---|---|
PHP 번호 : 필요한 경우에만 소수점 표시 (0) | 2020.12.31 |
C #의 유창한 인터페이스 및 상속 (0) | 2020.12.30 |
Drupal 행동 (0) | 2020.12.30 |
관리자로 실행중인 PowerShell에서 네트워크 드라이브에 액세스 할 수 없습니다. (0) | 2020.12.30 |