Sdílet prostřednictvím


Vytváření a odstraňování rozhraní API

Metody EnsureCreatedAsync a EnsureDeletedAsync poskytují jednoduchou alternativu k migraci pro správu schématu databáze. Tyto metody jsou užitečné ve scénářích, kdy jsou data přechodná a při změně schématu je možné je vyhodit. Například při vytváření prototypů, v testech nebo při využití místních mezipamětí.

Někteří poskytovatelé (zejména nerelační) migrace nepodporují. U těchto poskytovatelů je EnsureCreatedAsync často nejjednodušší způsob, jak inicializovat schéma databáze.

Varování

EnsureCreatedAsync a migrace nefungují dobře společně. Pokud používáte migrace, nepoužívejte pro inicializaci schématu EnsureCreatedAsync.

Přechod z EnsureCreatedAsync na Migrace není bezproblémový. Nejjednodušším způsobem, jak to udělat, je odstranit databázi a znovu ji vytvořit pomocí migrací. Pokud očekáváte použití migrací v budoucnu, je nejlepší začít s migrací místo použití EnsureCreatedAsync.

Ujistěte se, že EnsureDeletedAsync

Metoda EnsureDeletedAsync databázi zahodí, pokud existuje. Pokud nemáte příslušná oprávnění, vyvolá se výjimka.

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

EnsureCreatedAsync

EnsureCreatedAsync databázi vytvoří, pokud neexistuje, a inicializuje schéma databáze. Pokud existují nějaké tabulky (včetně tabulek pro jinou třídu DbContext), schéma se neinicializuje.

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

Spropitné

K dispozici jsou také asynchronní verze těchto metod.

Skript SQL

K získání SQL používaného EnsureCreatedAsyncmůžete použít metodu GenerateCreateScript.

var sql = dbContext.Database.GenerateCreateScript();

Více tříd DbContext

EnsureCreated funguje jenom v případě, že v databázi nejsou žádné tabulky. V případě potřeby můžete napsat vlastní kontrolu, abyste zjistili, jestli je potřeba inicializovat schéma, a pomocí základní služby IRelationalDatabaseCreator inicializovat schéma.

// TODO: Check whether the schema needs to be initialized

// Initialize the schema for this DbContext
var databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();
databaseCreator.CreateTables();