Tworzenie i usuwanie API
Metody EnsureCreatedAsync i EnsureDeletedAsync zapewniają uproszczoną alternatywę dla Migrations do zarządzania schematem bazy danych. Te metody są przydatne w scenariuszach, gdy dane są przejściowe i mogą zostać porzucone po zmianie schematu. Na przykład podczas tworzenia prototypów, w testach lub w lokalnych pamięciach podręcznych.
Niektórzy dostawcy (zwłaszcza nierelacyjne) nie obsługują migracji. W przypadku tych dostawców EnsureCreatedAsync
jest często najprostszym sposobem inicjowania schematu bazy danych.
Ostrzeżenie
EnsureCreatedAsync
i migracje nie współpracują ze sobą dobrze. Jeśli korzystasz z migracji, nie używaj EnsureCreatedAsync
do inicjalizacji schematu.
Przejście z EnsureCreatedAsync
do Migracji nie jest procesem bezproblemowym. Najprostszym sposobem wykonania tej czynności jest usunięcie bazy danych i ponowne utworzenie jej przy użyciu migracji. Jeśli przewidujesz użycie migracji w przyszłości, najlepiej rozpocząć od migracji zamiast korzystać z EnsureCreatedAsync
.
EnsureDeletedAsync
Metoda EnsureDeletedAsync
usunie bazę danych, jeśli istnieje. Jeśli nie masz odpowiednich uprawnień, zostanie zgłoszony wyjątek.
// Drop the database if it exists
await dbContext.Database.EnsureDeletedAsync();
EnsureCreatedAsync
EnsureCreatedAsync
utworzy bazę danych, jeśli nie istnieje, oraz zainicjuje schemat bazy danych. Jeśli istnieją tabele (w tym tabele dla innej klasy DbContext
), schemat nie zostanie zainicjowany.
// Create the database if it doesn't exist
dbContext.Database.EnsureCreatedAsync();
Wskazówka
Dostępne są również wersje asynchroniczne tych metod.
Skrypt SQL
Aby uzyskać język SQL używany przez EnsureCreatedAsync
, możesz użyć metody GenerateCreateScript.
var sql = dbContext.Database.GenerateCreateScript();
Wiele klas DbContext
EnsureCreated działa tylko wtedy, gdy w bazie danych nie ma żadnych tabel. W razie potrzeby możesz napisać własną funkcję sprawdzającą, aby sprawdzić, czy schemat wymaga inicjalizacji, i użyć podstawowej usługi IRelationalDatabaseCreator, aby zainicjować schemat.
// TODO: Check whether the schema needs to be initialized
// Initialize the schema for this DbContext
var databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();
databaseCreator.CreateTables();