0

저는 Asp.Net Mvc 응용 프로그램에서 작업 중이며 만든 데이터베이스 사용자 지정 데이터베이스 이니셜 라이저 클래스를 사용하여 데이터베이스를 시드하려고합니다.마이그레이션 시드 메서드가 데이터베이스 초기 메서드의 시드 메서드를 무시합니다.

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { 
    public ApplicationDbContext() 
     : base("defaultConnection", throwIfV1Schema: false) { 
    } 

    static ApplicationDbContext() { 
     Database.SetInitializer(new ApplicationDbInitializer()); 
    } 

여기 내 ApplicationDbInitializer 클래스 :

그래서 여기 내 DbContext입니다

public class ApplicationDbInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext> { 

    protected override void Seed(ApplicationDbContext context) { 
     InitializeIdentityForEF(context); 
     base.Seed(context); 
    } 

    public static void InitializeIdentityForEF(ApplicationDbContext db) { 

     // Create Role Admin if it does not exist 
     // Add user admin to Role Admin if not already added 
     // And some more initializing stuff 

    } 
} 

참고 : 너무 Migrations을 사용하고 있습니다.

Update-Database 명령을 사용하여 데이터베이스를 업데이트하고 시드하려고하면 (데이터베이스를 수동으로 삭제하더라도) 데이터베이스가 생성되고 있지만 시드되지는 않습니다.

내가 잘못하고 있거나 다른 방법으로 도와 주시면 고맙겠습니다.

답변

1

this question과 같은 문제인 것 같습니다.

따라서 시드 코드는 ApplicationDbContext의 인스턴스를 만들 때만 실행됩니다.

응용 프로그램 시작에이 같은 일부 코드를 추가

var ctx = new ApplicationDbContext(); 
ctx.Database.Initialize(true); 

그런 다음 데이터베이스는 응용 프로그램이 시작하는 다음 번 시드됩니다. 당신이 당신의 데이터베이스를 배정하는 Update-Database 명령을 사용하기를 원한다면

또는, 그건 다른Seed 방법을 사용합니다. 예 here을 볼 수 있습니다.

관련 문제