Entity Framework Core dari Microsoft adalah versi lintas platform, ringan, dan fleksibel dari pendahulunya, Entity Framework. EF Core adalah alat pemetaan relasional objek (ORM) yang menawarkan cara standar untuk menyimpan dan mengambil data ke dan dari berbagai sumber data.
Dengan memprogram terhadap model konseptual daripada model relasional. Akibatnya, tidak ada ketidaksesuaian impedansi antara bagaimana data direpresentasikan dalam aplikasi dan bagaimana data tersebut disimpan dalam database.
Warisan adalah fitur Pemrograman Berorientasi Objek yang memungkinkan Anda membuat subkelas dari kelas dasar sehingga memperluas fitur kelas dasar. Entity Framework Corememberikan dukungan yang sangat baik untuk pewarisan. Artikel ini berbicara tentang bagaimana kita dapat mengimplementasikan pewarisan di Entity Framework Core. Kami akan memanfaatkan EntityDeveloper untuk berbicara dengan database.
Prasyaratan
Agar dapat bekerja dengan contoh kode yang ditunjukkan dalam artikel ini, Anda harus menginstal yang berikut ini di sistem Anda:
- Edisi Komunitas Visual Studio 2019 (unduh)
- dotConnect untuk PostgreSQL (unduh)
- Pengembang Entitas
Anda dapat mengunduh salinan Pengembang Entitas (versi percobaan) dari sini:https://www.devart.com/entitydeveloper/download.html.
Buat Basis Data
Sekarang proyek ASP.NET Core Web API telah dibuat di Visual Studio 2019; langkah selanjutnya adalah membuat database. Perhatikan bahwa demi kesederhanaan, kami akan menggunakan database dengan beberapa dua tabel dengan desain sederhana dalam contoh ini. Buat database bernama Demo dan buat tiga tabel (Person, User, dan Manager) di dalamnya. Bidang dalam tabel ini harus dipetakan dengan properti kelas model yang ditampilkan nanti di artikel ini.
Buat Proyek API Web Inti ASP.NET baru
Dengan asumsi bahwa perangkat lunak yang diperlukan telah diinstal di komputer Anda agar dapat bekerja dengan Pengembang Entitas, ikuti langkah-langkah yang diuraikan di bawah ini untuk membuat proyek ASP.NET Core Web API baru.
1. Pertama, buka IDE Visual Studio 2019.
2. Selanjutnya, klik Buat proyek baru setelah IDE dimuat.
3. Klik Buat proyek baru .
4. Selanjutnya, pilih ASP.NET Core Web Application .
5. Klik Berikutnya .
6. Tentukan nama dan lokasi proyek – di mana ia harus disimpan di sistem Anda.
7. Secara opsional, klik Tempatkan solusi dan proyek di direktori yang sama kotak centang.
8. Selanjutnya, klik Buat .
9. Dalam Buat Aplikasi Web Inti ASP.NET baru jendela dialog yang ditampilkan berikutnya, pilih API sebagai templat proyek.
10. Pilih ASP.NET Core 3.1 atau yang lebih baru sebagai versi.
11. Anda harus menonaktifkan Konfigurasi untuk HTTPS dan Aktifkan Dukungan Docker pilihan dengan menonaktifkan masing-masing kotak centang.
12. Karena kita tidak akan menggunakan autentikasi dalam contoh ini, tentukan autentikasi sebagai No Authentication .
13. Terakhir, klik tombol Buat tombol untuk menyelesaikan proses.
Membuat Model Data Entitas
Hal berikutnya yang harus Anda lakukan adalah membuat model data entitas. Saat Anda membuat model di Entity Developer, ada dua opsi untuk dipilih:Database First (ini dipilih secara default) dan Model First. Dalam contoh ini, kita akan memanfaatkan pendekatan Database First. Ingatlah untuk memilih Hasilkan dari Database opsi untuk menghasilkan model Anda dari database dan memilih objek database yang Anda inginkan untuk menjadi bagian dari model data entitas Anda.
Ikuti langkah-langkah yang diuraikan di bawah ini untuk membuat model data entitas di Entity Developer menggunakan pendekatan database-first.
1. Pilih proyek Anda di Solution Explorer Jendela.
2. Klik kanan dan pilih Tambah>Item Baru .
3. Pilih Devart EF Core Model sebagai template seperti yang ditunjukkan di bawah ini.
4. Tentukan nama untuk model data entitas Anda dan klik Tambah .
5. Tentukan properti koneksi dan uji koneksi.
6. Klik Berikutnya untuk melanjutkan.
7. Secara default, opsi "Generate from Database" akan dipilih. Karena kita ingin model dibuat dari database, klik Berikutnya untuk melanjutkan.
8. Hapus semua opsi dan kemudian tentukan hanya objek database yang Anda inginkan untuk menjadi bagian dari model. Di sinilah Anda harus memilih tabel Produk dan Kategori.
9. Di Penyiapan aturan penamaan layar, Anda dapat secara opsional menentukan aturan penamaan untuk entitas Anda.
10. Di layar berikutnya Anda dapat menentukan properti model secara opsional.
11. Di layar berikutnya Anda dapat memilih konten diagram model secara opsional.
12. Di layar berikutnya Anda dapat secara opsional menentukan template pembuatan kode.
13. Tentukan template pembuatan kode pilihan Anda.
14. Terakhir, klik Selesai untuk menyelesaikan proses.
Model Data Entitas ADO.NET Anda menggunakan Pengembang Entitas akan dibuat bersama dengan konteks data dan kelas model.
Pewarisan dalam Inti Kerangka Entitas
Entity Framework Core (EF Core) memungkinkan Anda untuk memetakan hierarki kelas .NET ke database. Oleh karena itu, Anda dapat membuat entitas .NET yang direpresentasikan sebagai tipe dasar dan turunan, dan EF Core dapat membuat skema database untuk Anda. Namun, karena EF Core tidak secara otomatis mencari kelas dasar atau turunan, Anda harus secara eksplisit mendeklarasikan tipe CLR pada model Anda jika ingin dipetakan. Perlu dicatat bahwa menentukan hanya tipe dasar saja tidak akan cukup, yaitu, tidak akan secara otomatis memaksa EF Core untuk memasukkan semua sub-tipe.
Daftar kode berikut mengilustrasikan bagaimana Anda dapat membuat konteks data khusus untuk kelas serta subkelasnya.
public class DemoDbContext : DbContext {
public DbSet<Person> Person { get; set; }
public DbSet<Author> Authors { get; set; }
}
public class Person {
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Author : Person {
public string SubjectArea { get; set; }
}
Tabel Per Hierarki (TPH)
Dalam tipe pewarisan Tabel Per Hierarki (TPH) (ini adalah tipe pewarisan default di EF Core), Anda hanya akan memiliki satu tabel untuk seluruh hierarki untuk mewakili semua kelas. Untuk membedakan antara jenis yang berbeda, kolom "diskriminator" digunakan. Secara default, tabel diberi nama setelah kelas dasar atau bidang DbSet yang ditautkan dengannya. Nama tabel akan menjadi nama kelas dasar atau atribut DbSet yang sesuai secara default.
Cuplikan kode berikut mengilustrasikan bagaimana Tabel Per Hierarki dapat direpresentasikan:
public abstract class Person {
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class User : Person {
public string UserName { get; set; }
public string Password { get; set; }
}
public class Manager : Person {
public string Department { get; set; }
}
Tabel Per Jenis (TPT)
Tabel Per Tipe (TPT) pendekatan hubungan pewarisan digambarkan sebagai kunci asing. Dalam pendekatan ini, tabel terpisah mewakili setiap tipe (termasuk tipe abstrak) dari rantai pewarisan. Kunci asing digunakan untuk menghubungkan tabel yang mewakili tipe tipe turunan dengan tipe dasarnya. Dalam strategi ini, EF Core membuat tabel dasar dalam database dan beberapa tabel khusus untuk setiap jenis turunan.
Daftar kode berikut menunjukkan bagaimana pendekatan Table Per Type (TPT) dapat diterapkan:
public abstract class Person {
public int Id { get; set; }
public string FullName { get; set; }
}
[Table("Users")]
public class User : Person {
public string UserName { get; set; }
public string Password { get; set; }
}
[Table("Managers")]
public class Manager : Person {
public string Department { get; set; }
}
Tabel Per Jenis Beton (TPC)
Dalam pendekatan Table Per Concrete Type (TPC), setiap tipe konkret dalam rantai pewarisan diwakili oleh tabel yang berbeda dalam database tetapi bukan kelas abstrak. Properti dari tipe dasar abstrak dibuat sebagai bidang dalam tabel setiap tipe beton.
Desain kelas akan sama dengan TPH. Berikut cara menentukan tabel untuk setiap subkelas:
public class MyDbContext : DbContext {
public DbSet<Person> Person { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity<User>().Map(m => {
m.MapInheritedProperties();
m.ToTable("Users");
});
modelBuilder.Entity<Author>().Map(m => {
m.MapInheritedProperties();
m.ToTable("Managers");
});
}
}
Ringkasan
Entity Framework Core dapat dijalankan pada platform apa pun yang mendukung .NET Standard 2.1. Ini termasuk .NET Core 3.1 serta .NET 5. Namun, itu tidak akan dijalankan pada .NET Standard 2.0, yang menyiratkan bahwa dimulai dengan EF Core 5.0, Anda tidak akan dapat memanfaatkan EF Core dengan .NET Framework. Selamat membaca!