Aplikasi saya yang sedang di-porting ke .NET core akan menggunakan EF Core baru dengan SQLite. Saya ingin secara otomatis membuat database dan struktur tabel saat aplikasi dijalankan pertama kali. Menurut dokumentasi inti EF, hal ini dilakukan dengan menggunakan perintah manual
dotnet ef migrations add MyFirstMigration
dotnet ef database update
Namun, saya tidak ingin pengguna akhir memasukkan perintah ini dan lebih suka aplikasi membuat dan menyiapkan database untuk penggunaan pertama. Untuk EF 6 ada fungsi seperti
Database.SetInitializer(new CreateDatabaseIfNotExists<MyContext>());
Tapi di EF Core ini sepertinya tidak ada. Saya tidak dapat menemukan contoh atau dokumentasi apa pun tentang sesuatu yang setara dengan inti EF dan tidak disebutkan dalam daftar fitur yang hilang dalam dokumentasi inti EF. Saya sudah menyiapkan kelas model sehingga saya dapat menulis beberapa kode untuk menginisialisasi database berdasarkan model tetapi akan lebih mudah jika framework melakukan ini secara otomatis. Saya tidak ingin membuat model secara otomatis atau bermigrasi, cukup buat struktur tabel di database baru.
Apakah saya melewatkan sesuatu di sini atau apakah fungsi tabel buat otomatis hilang di inti EF?
sumber
Jawaban saya sangat mirip dengan jawaban Ricardo, tetapi saya merasa bahwa pendekatan saya sedikit lebih mudah karena ada begitu banyak hal yang terjadi dalam
using
fungsinya sehingga saya bahkan tidak yakin bagaimana cara kerjanya pada level yang lebih rendah.Jadi bagi mereka yang menginginkan solusi sederhana dan bersih yang membuat database untuk Anda di mana Anda tahu persis apa yang terjadi di balik terpal, ini untuk Anda:
Ini berarti bahwa di dalam
DbContext
yang Anda buat (dalam hal ini, milik saya disebutTargetsContext
), Anda dapat menggunakan sebuah instance dariDbContext
untuk memastikan bahwa tabel yang ditentukan dengan di kelas dibuat saat Startup.cs dijalankan di aplikasi Anda.sumber
EnsureCreated
benar-benar mengabaikan migrasi dan hanya membuat skema untuk Anda, Anda tidak dapat mencampurnya dengan migrasi.EnsureCreated
dirancang untuk pengujian atau pembuatan prototipe cepat di mana Anda tidak apa-apa dengan menjatuhkan dan membuat ulang database setiap saat. Jika Anda menggunakan migrasi dan ingin menerapkannya secara otomatis saat aplikasi dimulai, Anda dapat menggunakannyacontext.Database.Migrate()
.IHostingEnvironment
sekarang sudah usang dan alternatif yang disarankan adalahMicrosoft.AspNetCore.Hosting.IWebHostEnvironment
.Jika Anda mendapatkan konteks melalui daftar parameter Configure di Startup.cs, Anda dapat melakukan ini:
sumber
Untuk EF Core 2.0+ saya harus mengambil pendekatan yang berbeda karena mereka mengubah API. Mulai Maret 2019 Microsoft menganjurkan Anda meletakkan kode migrasi database Anda di kelas entri aplikasi Anda tetapi di luar kode build WebHost.
sumber
Jika Anda belum membuat migrasi, ada 2 opsi
1. buat database dan tabel dari aplikasi Main:
2. buat tabel jika database sudah ada:
Terima kasih atas jawaban Bubi
sumber
EnsureCreated
atauEnsureDeleted
atauDatabase.Migrate
akan gagal"