Referensi alat Entity Framework Core - .NET Core CLI

Alat antarmuka baris perintah (CLI) untuk Entity Framework Core melakukan tugas pengembangan waktu desain. Misalnya, mereka membuat migrasi, menerapkan migrasi, dan menghasilkan kode untuk model berdasarkan database yang ada. Perintah adalah ekstensi untuk perintah dotnet lintas platform, yang merupakan bagian dari .NET Core SDK. Alat-alat ini berfungsi dengan proyek .NET Core.

Saat menggunakan Visual Studio, pertimbangkan untuk menggunakan alat Package Manager Console alih-alih alat CLI. Alat Konsol Manajer Paket secara otomatis:

  • Bekerja dengan proyek saat ini yang dipilih di Konsol Manajer Paket tanpa mengharuskan Anda beralih direktori secara manual.
  • Membuka file yang dihasilkan oleh perintah setelah perintah selesai.
  • Menyediakan penyelesaian tab perintah, parameter, nama proyek, jenis konteks, dan nama migrasi.

Menginstal alat

dotnet ef dapat diinstal sebagai alat global atau lokal. Sebagian besar pengembang lebih suka menginstal dotnet ef sebagai alat global menggunakan perintah berikut:

dotnet tool install --global dotnet-ef

Untuk menggunakannya sebagai alat lokal, pulihkan dependensi proyek yang mendeklarasikannya sebagai dependensi alat menggunakan file manifes alat.

Perbarui alat menggunakan perintah berikut:

dotnet tool update --global dotnet-ef

Sebelum dapat menggunakan alat pada proyek tertentu, Anda harus menambahkan paket ke Microsoft.EntityFrameworkCore.Design dalamnya.

dotnet add package Microsoft.EntityFrameworkCore.Design

Verifikasi penginstalan

Jalankan perintah berikut untuk memverifikasi bahwa alat EF Core CLI diinstal dengan benar:

dotnet ef

Output dari perintah mengidentifikasi versi alat yang digunakan:


                     _/\__
               ---==/    \\
         ___  ___   |.    \|\
        | __|| __|  |  )   \\\
        | _| | _|   \_/ |  //|\\
        |___||_|       /   \\\/\\

Entity Framework Core .NET Command-line Tools 2.1.3-rtm-32065

<Usage documentation follows, not shown.>

Memperbarui alat

Gunakan dotnet tool update --global dotnet-ef untuk memperbarui alat global ke versi terbaru yang tersedia. Jika Anda memiliki alat yang diinstal secara lokal dalam proyek Anda, gunakan dotnet tool update dotnet-ef. Instal versi tertentu dengan menambahkan --version <VERSION> ke perintah Anda. Lihat bagian Pembaruan dari dokumentasi alat dotnet untuk detail selengkapnya.

Menggunakan alat

Sebelum menggunakan alat, Anda mungkin harus membuat proyek startup atau mengatur lingkungan.

Proyek target dan proyek startup

Perintah merujuk ke proyek dan proyek startup.

  • Proyek ini juga dikenal sebagai proyek target karena merupakan tempat perintah menambahkan atau menghapus file. Secara default, proyek di direktori saat ini adalah proyek target. Anda dapat menentukan proyek yang berbeda sebagai proyek target dengan menggunakan --project opsi .

  • Proyek startup adalah proyek yang dibangun dan dijalankan alat. Alat harus menjalankan kode aplikasi pada waktu desain untuk mendapatkan informasi tentang proyek, seperti string koneksi database dan konfigurasi model. Secara default, proyek di direktori saat ini adalah proyek startup. Anda dapat menentukan proyek yang berbeda sebagai proyek startup dengan menggunakan --startup-project opsi .

Proyek startup dan proyek target sering kali merupakan proyek yang sama. Skenario umum di mana mereka adalah proyek terpisah adalah ketika:

  • Kelas konteks dan entitas EF Core berada dalam pustaka kelas .NET Core.
  • Aplikasi konsol .NET Core atau aplikasi web mereferensikan pustaka kelas.

Dimungkinkan juga untuk menempatkan kode migrasi di pustaka kelas terpisah dari konteks EF Core.

Kerangka kerja target lainnya

Alat CLI bekerja dengan proyek .NET Core dan proyek .NET Framework. Aplikasi yang memiliki model EF Core di pustaka kelas .NET Standard mungkin tidak memiliki proyek .NET Core atau .NET Framework. Misalnya, ini benar aplikasi Xamarin dan Platform Windows Universal. Dalam kasus seperti itu, Anda dapat membuat proyek aplikasi konsol .NET Core yang satu-satunya tujuannya adalah bertindak sebagai proyek startup untuk alat. Proyek ini dapat menjadi proyek dummy tanpa kode nyata - hanya diperlukan untuk menyediakan target untuk alat.

Mengapa proyek dummy diperlukan? Seperti disebutkan sebelumnya, alat harus menjalankan kode aplikasi pada waktu desain. Untuk melakukannya, mereka perlu menggunakan runtime .NET Core. Ketika model EF Core berada dalam proyek yang menargetkan .NET Core atau .NET Framework, alat EF Core meminjam runtime dari proyek. Mereka tidak dapat melakukannya jika model EF Core berada di pustaka kelas .NET Standard. Standar .NET bukan implementasi .NET yang sebenarnya; ini adalah spesifikasi dari sekumpulan API yang harus didukung oleh implementasi .NET. Oleh karena itu .NET Standard tidak cukup untuk alat EF Core untuk menjalankan kode aplikasi. Proyek dummy yang Anda buat untuk digunakan sebagai proyek startup menyediakan platform target konkret tempat alat dapat memuat pustaka kelas .NET Standard.

lingkungan ASP.NET Core

Anda dapat menentukan lingkungan untuk proyek ASP.NET Core pada baris perintah. Ini dan argumen tambahan apa pun diteruskan ke Program.CreateHostBuilder.

dotnet ef database update -- --environment Production

Tip

Token -- mengarahkan dotnet ef untuk memperlakukan semua yang mengikuti sebagai argumen dan tidak mencoba mengurainya sebagai opsi. Argumen tambahan apa pun yang tidak digunakan oleh dotnet ef diteruskan ke aplikasi.

Opsi umum

Pilihan Pendek Deskripsi
--json Tampilkan output JSON.
--context <DBCONTEXT> -c Kelas yang DbContext akan digunakan. Nama kelas saja atau sepenuhnya memenuhi syarat dengan namespace layanan. Jika opsi ini dihilangkan, EF Core akan menemukan kelas konteks. Jika ada beberapa kelas konteks, opsi ini diperlukan.
--project <PROJECT> -p Jalur relatif ke folder proyek proyek target. Nilai default adalah folder saat ini.
--startup-project <PROJECT> -s Jalur relatif ke folder proyek proyek startup. Nilai default adalah folder saat ini.
--framework <FRAMEWORK> Moniker Kerangka Kerja Target untuk kerangka kerja target. Gunakan saat file proyek menentukan beberapa kerangka kerja target, dan Anda ingin memilih salah satunya.
--configuration <CONFIGURATION> Konfigurasi build, misalnya: Debug atau Release.
--runtime <IDENTIFIER> Pengidentifikasi runtime target untuk memulihkan paket. Untuk daftar Pengidentifikasi Runtime (RID), lihat katalog RID.
--no-build Jangan membangun proyek. Dimaksudkan untuk digunakan saat build sudah diperbarui.
--help -h Tampilkan informasi bantuan.
--verbose -v Tampilkan output verbose.
--no-color Jangan mewarnai output.
--prefix-output Output awalan dengan tingkat.

Argumen tambahan apa pun diteruskan ke aplikasi.

dotnet ef database drop

Menghapus database.

Opsi:

Pilihan Pendek Deskripsi
--force -f Jangan mengkonfirmasi.
--dry-run Perlihatkan database mana yang akan dihilangkan, tetapi jangan jatuhkan.

Opsi umum tercantum di atas.

dotnet ef database update

Memperbarui database ke migrasi terakhir atau ke migrasi tertentu.

Argumen:

Argumen Deskripsi
<MIGRATION> Migrasi target. Migrasi dapat diidentifikasi berdasarkan nama atau berdasarkan ID. Angka 0 adalah kasus khusus yang berarti sebelum migrasi pertama dan menyebabkan semua migrasi dikembalikan. Jika tidak ada migrasi yang ditentukan, perintah default ke migrasi terakhir.

Opsi:

Pilihan Deskripsi
--connection <CONNECTION> string koneksi ke database. Default ke yang ditentukan dalam AddDbContext atau OnConfiguring.

Opsi umum tercantum di atas.

Contoh berikut memperbarui database ke migrasi tertentu. Yang pertama menggunakan nama migrasi dan yang kedua menggunakan ID migrasi dan koneksi tertentu:

dotnet ef database update InitialCreate
dotnet ef database update 20180904195021_InitialCreate --connection your_connection_string

dotnet ef dbcontext info

Mendapatkan informasi tentang jenis DbContext .

Opsi umum tercantum di atas.

dotnet ef dbcontext list

Mencantumkan jenis yang tersedia DbContext .

Opsi umum tercantum di atas.

dotnet ef dbcontext optimize

Menghasilkan versi model yang dikompilasi yang digunakan oleh DbContext.

Lihat Model yang dikompilasi untuk informasi selengkapnya.

Opsi:

Pilihan Pendek Deskripsi
--output-dir <PATH> -o Direktori untuk memasukkan file. Jalur relatif terhadap direktori proyek.
--namespace <NAMESPACE> -n Namespace layanan yang digunakan untuk semua kelas yang dihasilkan. Default yang dihasilkan dari namespace layanan akar dan direktori output ditambah CompiledModels.

Opsi umum tercantum di atas.

Contoh berikut menggunakan pengaturan default dan berfungsi jika hanya ada satu DbContext dalam proyek:

dotnet ef dbcontext optimize

Contoh berikut mengoptimalkan model untuk konteks dengan nama yang ditentukan dan menempatkannya di folder dan namespace terpisah:

dotnet ef dbcontext optimize -o Models -n BlogModels -c BlogContext

dotnet ef dbcontext scaffold

Menghasilkan kode untuk DbContext jenis entitas dan untuk database. Agar perintah ini menghasilkan jenis entitas, tabel database harus memiliki kunci primer.

Argumen:

Argumen Deskripsi
<CONNECTION> string koneksi ke database. Untuk proyek ASP.NET Core 2.x, nilainya bisa berupa name=<name of string koneksi>. Dalam hal ini nama berasal dari sumber konfigurasi yang disiapkan untuk proyek.
<PROVIDER> Penyedia yang akan digunakan. Biasanya ini adalah nama paket NuGet, misalnya: Microsoft.EntityFrameworkCore.SqlServer.

Opsi:

Pilihan Pendek Deskripsi
--data-annotations -d Gunakan atribut untuk mengonfigurasi model (jika memungkinkan). Jika opsi ini dihilangkan, hanya API fasih yang digunakan.
--context <NAME> -c Nama kelas yang DbContext akan dihasilkan.
--context-dir <PATH> Direktori untuk memasukkan DbContext file kelas. Jalur relatif terhadap direktori proyek. Namespace berasal dari nama folder.
--context-namespace <NAMESPACE> Namespace yang digunakan untuk kelas yang dihasilkan DbContext . Catatan: mengambil alih --namespace.
--force -f Timpa file yang ada.
--output-dir <PATH> -o Direktori untuk memasukkan file kelas entitas. Jalur relatif terhadap direktori proyek.
--namespace <NAMESPACE> -n Namespace layanan yang digunakan untuk semua kelas yang dihasilkan. Default yang dihasilkan dari namespace layanan akar dan direktori output.
--schema <SCHEMA_NAME>... Skema tabel dan tampilan untuk menghasilkan jenis entitas. Untuk menentukan beberapa skema, ulangi --schema untuk masing-masing skema. Jika opsi ini dihilangkan, semua skema disertakan. Jika opsi ini digunakan, maka semua tabel dan tampilan dalam skema akan disertakan dalam model, bahkan jika mereka tidak secara eksplisit disertakan menggunakan --table.
--table <TABLE_NAME>... -t Tabel dan tampilan untuk menghasilkan jenis entitas. Untuk menentukan beberapa tabel, ulangi -t atau --table untuk masing-masing tabel. Tabel atau tampilan dalam skema tertentu dapat disertakan menggunakan format 'schema.table' atau 'schema.view'. Jika opsi ini dihilangkan, semua tabel dan tampilan disertakan.
--use-database-names Gunakan nama tabel, tampilan, urutan, dan kolom persis seperti yang muncul di database. Jika opsi ini dihilangkan, nama database diubah agar lebih sesuai dengan konvensi gaya nama C#.
--no-onconfiguring Menekan pembuatan OnConfiguring metode di kelas yang dihasilkan DbContext .
--no-pluralize Jangan gunakan pluralizer.

Opsi umum tercantum di atas.

Contoh berikut mengacak semua skema dan tabel dan menempatkan file baru di folder Model .

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models

Contoh perancah berikut ini hanya memilih tabel dan membuat konteks dalam folder terpisah dengan nama dan namespace yang ditentukan:

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models -t Blog -t Post --context-dir Context -c BlogContext --context-namespace New.Namespace

Contoh berikut membaca string koneksi dari kumpulan konfigurasi proyek menggunakan alat Secret Manager.

dotnet user-secrets set ConnectionStrings:Blogging "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Blogging"
dotnet ef dbcontext scaffold Name=ConnectionStrings:Blogging Microsoft.EntityFrameworkCore.SqlServer

Contoh berikut melewati perancah OnConfiguring metode. Ini dapat berguna ketika Anda ingin mengonfigurasi DbContext di luar kelas. Misalnya, aplikasi ASP.NET Core biasanya mengonfigurasinya di Startup.ConfigureServices.

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;User Id=myUsername;Password=myPassword;" Microsoft.EntityFrameworkCore.SqlServer --no-onconfiguring

dotnet ef dbcontext script

Menghasilkan skrip SQL dari DbContext. Melewati migrasi apa pun.

Opsi:

Pilihan Pendek Deskripsi
--output <FILE> -o File untuk menulis hasilnya.

Opsi umum tercantum di atas.

dotnet ef migrations add

Menambahkan migrasi baru.

Argumen:

Argumen Deskripsi
<NAME> Nama migrasi.

Opsi:

Pilihan Pendek Deskripsi
--output-dir <PATH> -o Direktori menggunakan untuk menghasilkan file. Jalur relatif terhadap direktori proyek target. Default ke "Migrasi".
--namespace <NAMESPACE> -n Namespace yang akan digunakan untuk kelas yang dihasilkan. Default yang dihasilkan dari direktori output.

Opsi umum tercantum di atas.

dotnet ef migrations bundle

Membuat executable untuk memperbarui database.

Opsi:

Pilihan Pendek Deskripsi
--output <FILE> -o Jalur file yang dapat dieksekusi untuk dibuat.
--force -f Timpa file yang ada.
--self-contained Bundel juga runtime .NET sehingga tidak perlu diinstal pada komputer.
--target-runtime <RUNTIME_IDENTIFIER> -r Runtime target yang akan dibundel.

Opsi umum tercantum di atas.

dotnet ef migrations has-pending-model-changes

Catatan

Perintah ini ditambahkan dalam EF Core 8.0.

Memeriksa apakah ada perubahan yang telah dilakukan pada model sejak migrasi terakhir.

Opsi:

Opsi umum tercantum di atas.

dotnet ef migrations list

Mencantumkan migrasi yang tersedia.

Opsi:

Pilihan Deskripsi
--connection <CONNECTION> string koneksi ke database. Default ke yang ditentukan dalam AddDbContext atau OnConfiguring.
--no-connect Jangan sambungkan ke database.

Opsi umum tercantum di atas.

dotnet ef migrations remove

Menghapus migrasi terakhir, mengembalikan perubahan kode yang dilakukan untuk migrasi terbaru.

Opsi:

Pilihan Pendek Deskripsi
--force -f Mengembalikan migrasi terbaru, mengembalikan perubahan kode dan database yang dilakukan untuk migrasi terbaru. Terus mengembalikan hanya perubahan kode jika terjadi kesalahan saat menyambungkan ke database.

Opsi umum tercantum di atas.

dotnet ef migrations script

Menghasilkan skrip SQL dari migrasi.

Argumen:

Argumen Deskripsi
<FROM> Migrasi awal. Migrasi dapat diidentifikasi berdasarkan nama atau berdasarkan ID. Angka 0 adalah kasus khusus yang berarti sebelum migrasi pertama. Default ke 0.
<TO> Migrasi akhir. Default ke migrasi terakhir.

Opsi:

Pilihan Pendek Deskripsi
--output <FILE> -o File untuk menulis skrip.
--idempotent -i Buat skrip yang dapat digunakan pada database di migrasi apa pun.
--no-transactions Jangan membuat pernyataan transaksi SQL.

Opsi umum tercantum di atas.

Contoh berikut membuat skrip untuk migrasi InitialCreate:

dotnet ef migrations script 0 InitialCreate

Contoh berikut membuat skrip untuk semua migrasi setelah migrasi InitialCreate.

dotnet ef migrations script 20180904195021_InitialCreate

Sumber Daya Tambahan: