Создание и удаление API
Методы EnsureCreatedAsync и EnsureDeletedAsync предоставляют упрощенную альтернативу миграции для управления схемой базы данных. Эти методы полезны в сценариях, когда данные временные и могут быть удалены при изменении схемы. Например, во время прототипа, в тестах или для локальных кэшей.
Некоторые поставщики (особенно те, которые используют нереляционные базы данных) не поддерживают миграции. Для этих поставщиков EnsureCreatedAsync
часто является самым простым способом инициализации схемы базы данных.
Предупреждение
EnsureCreatedAsync
и миграции не работают эффективно вместе. Если вы используете миграции, не используйте EnsureCreatedAsync
для инициализации схемы.
Переход с EnsureCreatedAsync
на миграцию не является простым процессом. Самый простой способ сделать это — удалить базу данных и повторно создать ее с помощью миграций. Если вы планируете использовать миграции в будущем, лучше сразу начать с Миграции вместо использования EnsureCreatedAsync
.
EnsureDeletedAsync
Метод EnsureDeletedAsync
удаляет базу данных, если она существует. Если у вас нет соответствующих разрешений, создается исключение.
// Drop the database if it exists
await dbContext.Database.EnsureDeletedAsync();
EnsureCreatedAsync
EnsureCreatedAsync
создаст базу данных, если она не существует и инициализирует схему базы данных. Если какие-либо таблицы существуют (включая таблицы для другого класса DbContext
), схема не будет инициализирована.
// Create the database if it doesn't exist
dbContext.Database.EnsureCreatedAsync();
Совет
Также доступны асинхронные версии этих методов.
Скрипт SQL
Чтобы получить SQL, используемый EnsureCreatedAsync
, можно использовать метод 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();