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 EnsureCreated
program , 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();