Поделиться через


Создание и удаление 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();