Udostępnij za pośrednictwem


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