Tworzenie i upuszczanie interfejsów API

Metody EnsureCreated() i EnsureDeleted() zapewniają uproszczoną alternatywę dla migracji 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. Dla tych dostawców EnsureCreated jest często najprostszym sposobem inicjowania schematu bazy danych.

Ostrzeżenie

EnsureCreated i Migracje nie działają dobrze razem. Jeśli używasz migracji, nie używaj EnsureCreated polecenia , aby zainicjować schemat.

Przejście z EnsureCreated do migracji nie jest bezproblemowym środowiskiem. 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 zacząć od migracji zamiast używać polecenia EnsureCreated.

EnsureDeleted

Metoda EnsureDeleted usunie bazę danych, jeśli istnieje. Jeśli nie masz odpowiednich uprawnień, zostanie zgłoszony wyjątek.

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

EnsureCreated

EnsureCreated program utworzy bazę danych, jeśli nie istnieje i zainicjuje schemat bazy danych. Jeśli istnieją tabele (w tym tabele dla innej DbContext klasy), schemat nie zostanie zainicjowany.

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

Napiwek

Dostępne są również wersje asynchroniczne tych metod.

Skrypt SQL

Aby uzyskać język SQL używany przez EnsureCreatedprogram , możesz użyć GenerateCreateScript metody .

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łasne sprawdzanie, aby sprawdzić, czy schemat musi zostać zainicjowany, i użyć bazowej 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();