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