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();
.NET