Membuat dan Menghilangkan API
Metode EnsureCreated() dan EnsureDeleted() menyediakan alternatif ringan untuk Migrasi untuk mengelola skema database. Metode ini berguna dalam skenario ketika data bersifat sementara dan dapat dihilangkan ketika skema berubah. Misalnya selama prototipe, dalam pengujian, atau untuk cache lokal.
Beberapa penyedia (terutama yang non-relasional) tidak mendukung Migrasi. Untuk penyedia ini, EnsureCreated
sering kali merupakan cara term mudah untuk menginisialisasi skema database.
Peringatan
EnsureCreated
dan Migrasi tidak bekerja sama dengan baik. Jika Anda menggunakan Migrasi, jangan gunakan EnsureCreated
untuk menginisialisasi skema.
Transisi dari EnsureCreated
ke Migrasi bukanlah pengalaman yang mulus. Cara paling sederhana untuk melakukannya adalah dengan menghilangkan database dan membuatnya kembali menggunakan Migrasi. Jika Anda mengantisipasi penggunaan migrasi di masa mendatang, yang terbaik adalah memulai dengan Migrasi alih-alih menggunakan EnsureCreated
.
EnsureDeleted
Metode EnsureDeleted
ini akan menghilangkan database jika ada. Jika Anda tidak memiliki izin yang sesuai, pengecualian akan dilemparkan.
// Drop the database if it exists
dbContext.Database.EnsureDeleted();
EnsureCreated
EnsureCreated
akan membuat database jika tidak ada dan menginisialisasi skema database. Jika ada tabel (termasuk tabel untuk kelas lain DbContext
), skema tidak akan diinisialisasi.
// Create the database if it doesn't exist
dbContext.Database.EnsureCreated();
Tip
Versi asinkron dari metode ini juga tersedia.
Skrip SQL
Untuk mendapatkan SQL yang digunakan oleh EnsureCreated
, Anda dapat menggunakan metode .GenerateCreateScript
var sql = dbContext.Database.GenerateCreateScript();
Beberapa kelas DbContext
EnsureCreated hanya berfungsi ketika tidak ada tabel yang ada dalam database. Jika diperlukan, Anda dapat menulis pemeriksaan Anda sendiri untuk melihat apakah skema perlu diinisialisasi, dan menggunakan layanan IRelationalDatabaseCreator yang mendasar untuk menginisialisasi skema.
// TODO: Check whether the schema needs to be initialized
// Initialize the schema for this DbContext
var databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();
databaseCreator.CreateTables();