2017-11-30 9 views
0

update-database 명령을 실행하지 않고 EF 마이그레이션이 시드 데이터와 함께 실행되는지 여부를 알고 싶습니다. 즉. update-database 명령을 실행하지 않고도 데이터베이스에 생성 된 모든 테이블을 볼 수 있습니다.Entityframework Core 2.0 응용 프로그램이 처음 실행될 때 마이그레이션이 실행됩니까?

문제가 있습니까? 아니면 예상되는 동작입니까?

나는 데이터를 시드 별도의 방법을 사용하고 있습니다 :

public async Task SeedAsync(IServiceProvider serviceProvider) 
    { 
     //Based on EF team's example at https://github.com/aspnet/MusicStore/blob/dev/samples/MusicStore/Models/SampleData.cs 
     using (var serviceScope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope()) 
     { 
      var dbContext = serviceScope.ServiceProvider.GetService<WorkflowDBContext>(); 
      if(!dbContext.AllMigrationsApplied()) 
      { 
       serviceScope.ServiceProvider.GetService<WorkflowDBContext>().Database.Migrate(); 
       if (!await dbContext.Alert.AnyAsync()) 
       { 
        await SeedData(dbContext); 
       } 
      } 
     } 
    } 

public static class DbContextExtension 
{ 
    public static bool AllMigrationsApplied(this WorkflowDBContext context) 
    { 
     var applied = context.GetService<IHistoryRepository>() 
          .GetAppliedMigrations() 
          .Select(m => m.MigrationId); 

     var total = context.GetService<IMigrationsAssembly>() 
          .Migrations 
          .Select(m => m.Key); 

     return !total.Except(applied).Any(); 
    } 
} 

감사

답변

0

EF 코어 이제까지 자동으로 마이그레이션 적용되지 않습니다. 응용 프로그램이 DbContext.Database.EnsureCreated() 또는 Migrate() 어딘가에 전화 할 수 있습니다 ...

+0

감사합니다. 질문을 업데이트하고 데이터를 시드하는 데 사용하는 코드를 붙여 넣었습니다. 내가 한 일은이 코드에서 옳은 코드인지 아니면 어떤 코드의 냄새입니까? –