API 만들기 및 삭제

EnsureCreated()EnsureDeleted() 메서드는 데이터베이스 스키마를 관리하기 위한 마이그레이션에 대한 간단한 대안을 제공합니다. 이러한 메서드는 데이터가 일시적이며 스키마가 변경될 때 삭제할 수 있는 시나리오에서 유용합니다. 예를 들어 프로토타입 생성 중, 테스트 중 또는 로컬 캐시의 경우입니다.

일부 공급자(특히 비관계형 공급자)는 마이그레이션을 지원하지 않습니다. 이러한 공급자의 경우 EnsureCreated는 데이터베이스 스키마를 초기화하는 가장 쉬운 방법입니다.

Warning

EnsureCreated 및 마이그레이션은 함께 작동하지 않습니다. 마이그레이션을 사용하는 경우 EnsureCreated를 사용하여 스키마를 초기화하지 마세요.

EnsureCreated를 마이그레이션으로 전환하는 것은 원활한 환경이 아닙니다. 이 작업을 수행하는 가장 간단한 방법은 데이터베이스를 삭제하고 마이그레이션을 사용하여 다시 만드는 것입니다. 나중에 마이그레이션을 사용할 것으로 예상되는 경우 EnsureCreated를 사용하는 대신 마이그레이션으로 시작하는 것이 가장 좋습니다.

EnsureDeleted

EnsureDeleted 메서드는 데이터베이스가 있는 경우 삭제합니다. 적절한 권한이 없으면 예외가 throw됩니다.

// Drop the database if it exists
dbContext.Database.EnsureDeleted();

EnsureCreated

EnsureCreated는 데이터베이스가 없는 경우 데이터베이스를 만들고 데이터베이스 스키마를 초기화합니다. 테이블이 있는 경우(다른 DbContext 클래스에 대한 테이블 포함) 스키마가 초기화되지 않습니다.

// Create the database if it doesn't exist
dbContext.Database.EnsureCreated();

이러한 메서드의 비동기 버전도 사용할 수 있습니다.

SQL 스크립트

EnsureCreated에서 사용하는 SQL을 얻기 위해 GenerateCreateScript 메서드를 사용할 수 있습니다.

var sql = dbContext.Database.GenerateCreateScript();

여러 DbContext 클래스

EnsureCreated는 데이터베이스에 테이블이 없는 경우에만 작동합니다. 필요한 경우 고유한 검사를 작성하여 스키마를 초기화해야 하는지 확인하고 기본 IRelationalDatabaseCreator 서비스를 사용하여 스키마를 초기화할 수 있습니다.

// TODO: Check whether the schema needs to be initialized

// Initialize the schema for this DbContext
var databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();
databaseCreator.CreateTables();