API создания и удаления

EnsureDeleted() Методы EnsureCreated() предоставляют упрощенную альтернативу миграции для управления схемой базы данных. Эти методы полезны в сценариях, когда данные временные и могут быть удалены при изменении схемы. Например, во время прототипа, в тестах или для локальных кэшей.

Некоторые поставщики (особенно нереляционные) не поддерживают миграцию. Для этих поставщиков EnsureCreated часто проще всего инициализировать схему базы данных.

Предупреждение

EnsureCreated и миграции не работают хорошо вместе. Если вы используете миграции, не инициализировать EnsureCreated схему.

Переход от EnsureCreated миграции к миграции не является простым интерфейсом. Самый простой способ сделать это — удалить базу данных и повторно создать ее с помощью миграций. Если вы ожидаете использование миграций в будущем, лучше всего начать с миграций вместо использования EnsureCreated.

EnsureDeleted

Метод EnsureDeleted удаляет базу данных, если она существует. Если у вас нет соответствующих разрешений, создается исключение.

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

EnsureCreated

EnsureCreated создаст базу данных, если она не существует и инициализирует схему базы данных. Если какие-либо таблицы существуют (включая таблицы для другого DbContext класса), схема не будет инициализирована.

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

Совет

Также доступны асинхронные версии этих методов.

Скрипт SQL

Чтобы получить SQL, используемый EnsureCreated, можно использовать 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();