수색…


CreateDatabaseIfNotExists

EntityFramework에서 기본적으로 사용되는 IDatabaseInitializer 구현입니다. 이름에서 알 수 있듯이 데이터베이스가 없으면 데이터베이스가 만들어집니다. 그러나 모델을 변경하면 예외가 발생합니다.

용법:

public class MyContext : DbContext {
    public MyContext() {
        Database.SetInitializer(new CreateDatabaseIfNotExists<MyContext>());
    }
}

DropCreateDatabaseIfModelChanges

IDatabaseInitializer 구현은 모델이 자동으로 변경된 경우 데이터베이스를 삭제하고 다시 작성합니다.

용법:

public class MyContext : DbContext {
    public MyContext() {
        Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext>());
    }
}

DropCreateDatabaseAlways

IDatabaseInitializer 구현은 응용 프로그램 도메인에서 컨텍스트가 사용될 때마다 데이터베이스를 삭제하고 다시 작성합니다. 데이터 손실은 데이터베이스가 다시 생성된다는 사실 때문에주의하십시오.

용법:

public class MyContext : DbContext {
    public MyContext() {
        Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>());
    }
}

사용자 지정 데이터베이스 초기화 프로그램

IDatabaseInitializer 의 고유 한 구현을 만들 수 있습니다.

예를 들어 초기화 프로그램을 구현하면 데이터베이스를 0으로 마이그레이션 한 다음 최신 마이그레이션으로 마이그레이션합니다 (예 : 통합 테스트 실행시 유용). 그렇게하려면 DbMigrationsConfiguration 유형이 필요합니다.

public class RecreateFromScratch<TContext, TMigrationsConfiguration> : 
IDatabaseInitializer<TContext>
where TContext : DbContext
where TMigrationsConfiguration : DbMigrationsConfiguration<TContext>, new()
{
    private readonly DbMigrationsConfiguration<TContext> _configuration;

    public RecreateFromScratch()
    {
        _configuration = new TMigrationsConfiguration();
    }

    public void InitializeDatabase(TContext context)
    {
        var migrator = new DbMigrator(_configuration);
        migrator.Update("0");
        migrator.Update();
    }
}

MigrateDatabaseToLatestVersion

코드 첫 번째 마이그레이션을 사용하여 데이터베이스를 최신 버전으로 업데이트하는 IDatabaseInitializer 의 구현입니다. 이 이니셜 라이저를 사용하려면 DbMigrationsConfiguration 유형도 사용해야합니다.

용법:

public class MyContext : DbContext {
    public MyContext() {
        Database.SetInitializer(
            new MigrateDatabaseToLatestVersion<MyContext, Configuration>());
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow