Kerangka Kerja Entitas - Warisan
Pewarisan memungkinkan untuk membuat model kompleks yang lebih mencerminkan bagaimana pengembang berpikir dan juga mengurangi pekerjaan yang diperlukan untuk berinteraksi dengan model tersebut. Pewarisan yang digunakan dengan entitas memiliki tujuan yang sama seperti pewarisan yang digunakan dengan kelas, sehingga pengembang sudah mengetahui dasar-dasar cara kerja fitur ini.
Mari kita lihat contoh berikut dan dengan membuat proyek aplikasi konsol baru.
Step 1 - Tambahkan Model Data Entitas ADO.NET dengan cara klik kanan pada nama proyek dan pilih Add → New Item…
Step 2 - Tambahkan satu entitas dan beri nama Person dengan mengikuti semua langkah yang disebutkan dalam bab Pendekatan Model Pertama.
Step 3 - Tambahkan beberapa properti skalar seperti yang ditunjukkan pada gambar berikut.
Step 4 - Kami akan menambahkan dua entitas lagi Student dan Teacher, yang akan mewarisi properti dari Person Table.
Step 5 - Sekarang tambahkan entitas Mahasiswa dan pilih Orang dari kotak kombo tipe Dasar seperti yang ditunjukkan pada gambar berikut.
Step 6 - Demikian pula menambahkan entitas Guru.
Step 7 - Sekarang tambahkan properti skalar EnrollmentDate ke entitas siswa dan properti HireDate ke entitas Guru.
Step 8 - Mari kita lanjutkan dan buat database.
Step 9 - Klik kanan pada permukaan desain dan pilih Hasilkan Database dari Model…
Step 10- Untuk membuat Database baru, klik New Connection… Dialog berikut akan terbuka. Klik OK.
Step 11- Klik Selesai. Ini akan menambahkan file * .edmx.sql dalam proyek. Anda dapat menjalankan skrip DDL di Visual Studio dengan membuka file .sql. Sekarang klik kanan dan pilih Execute.
Step 12 - Masuk ke server explorer Anda akan melihat bahwa database dibuat dengan tiga tabel yang ditentukan.
Step 13 - Anda juga dapat melihat bahwa kelas domain berikut juga dibuat secara otomatis.
public partial class Person {
public int ID { get; set; }
public string FirstMidName { get; set; }
public string LastName { get; set; }
}
public partial class Student : Person {
public System.DateTime EnrollmentDate { get; set; }
}
public partial class Teacher : Person {
public System.DateTime HireDate { get; set; }
}
Berikut adalah kelas Konteks.
public partial class InheritanceModelContainer : DbContext {
public InheritanceModelContainer() :
base("name = InheritanceModelContainer") {}
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<Person> People { get; set; }
}
Mari tambahkan beberapa Siswa dan Guru ke database dan kemudian mengambilnya dari database.
class Program {
static void Main(string[] args) {
using (var context = new InheritanceModelContainer()) {
var student = new Student {
FirstMidName = "Meredith",
LastName = "Alonso",
EnrollmentDate = DateTime.Parse(DateTime.Today.ToString())
};
context.People.Add(student);
var student1 = new Student {
FirstMidName = "Arturo",
LastName = "Anand",
EnrollmentDate = DateTime.Parse(DateTime.Today.ToString())
};
context.People.Add(student1);
var techaer = new Teacher {
FirstMidName = "Peggy",
LastName = "Justice",
HireDate = DateTime.Parse(DateTime.Today.ToString())
};
context.People.Add(techaer);
var techaer1 = new Teacher {
FirstMidName = "Yan",
LastName = "Li",
HireDate = DateTime.Parse(DateTime.Today.ToString())
};
context.People.Add(techaer1);
context.SaveChanges();
}
}
}
Siswa dan guru ditambahkan ke dalam database. Untuk mengambil kembali siswa dan guru, fileOfType metode perlu digunakan, yang akan mengembalikan Siswa dan Guru terkait dengan departemen yang ditentukan.
Console.WriteLine("All students in database");
Console.WriteLine("");
foreach (var student in context.People.OfType<Student>()) {
string name = student.FirstMidName + " " + student.LastName;
Console.WriteLine("ID: {0}, Name: {1}, \tEnrollment Date {2} ",
student.ID, name, student.EnrollmentDate.ToString());
}
Console.WriteLine("");
Console.WriteLine("************************************************************ *****");
Console.WriteLine("");
Console.WriteLine("All teachers in database");
Console.WriteLine("");
foreach (var teacher in context.People.OfType<Teacher>()) {
string name = teacher.FirstMidName + " " + teacher.LastName;
Console.WriteLine("ID: {0}, Name: {1}, \tHireDate {2} ",
teacher.ID, name, teacher.HireDate.ToString());
}
Console.WriteLine("");
Console.WriteLine("************************************************************ *****");
Console.ReadKey();
Dalam kueri pertama, ketika Anda menggunakan OfType <Student> () maka Anda tidak akan dapat mengakses HireDate karena properti HireDate adalah bagian dari Entitas Guru dan demikian pula properti EnrollmentDate tidak akan dapat diakses ketika Anda menggunakan OfType <Teacher> ()
Ketika kode di atas dijalankan, Anda akan menerima output berikut -
All students in database
ID: 1, Name: Meredith Alonso, Enrollment Date 10/30/2015 12:00:00 AM
ID: 2, Name: Arturo Anand, Enrollment Date 10/30/2015 12:00:00 AM
*****************************************************************
All teachers in database
ID: 3, Name: Peggy Justice, HireDate 10/30/2015 12:00:00 AM
ID: 4, Name: Yan Li, HireDate 10/30/2015 12:00:00 AM
*****************************************************************
Kami menyarankan Anda untuk menjalankan contoh di atas dengan cara langkah demi langkah untuk pemahaman yang lebih baik.