Kerangka Kerja Entitas - Jenis
Dalam Entity Framework, ada dua tipe entitas yang memungkinkan pengembang menggunakan kelas data kustom mereka sendiri bersama dengan model data tanpa membuat modifikasi apa pun pada kelas datanya sendiri.
- Entitas POCO
- Proxy Dinamis
Entitas POCO
POCO adalah singkatan dari objek CLR "biasa-lama" yang dapat digunakan sebagai objek domain yang ada dengan model data Anda.
Kelas data POCO yang dipetakan ke entitas ditentukan dalam model data.
Ini juga mendukung sebagian besar perilaku kueri, menyisipkan, memperbarui, dan menghapus yang sama sebagai tipe entitas yang dihasilkan oleh alat Model Data Entitas.
Anda dapat menggunakan template POCO untuk menghasilkan tipe entitas yang mengabaikan ketekunan dari model konseptual.
Mari kita lihat contoh Model Data Entitas Konseptual berikut.
Untuk menghasilkan entitas POCO untuk model Entitas di atas -
Step 1- Klik kanan pada jendela desainer. Ini akan menampilkan dialog berikut.
Step 2 - Pilih Add Code Generation Item ...
Step 3 - Pilih EF 6.x DbContext Generator, tulis nama lalu klik tombol Add.
Anda akan melihat di penjelajah solusi Anda bahwa template POCODemo.Context.tt dan POCODemo.tt dibuat.
POCODemo.Context menghasilkan DbContext dan kumpulan objek yang dapat Anda kembalikan dan gunakan untuk kueri, katakanlah untuk konteks, Siswa dan Kursus, dll.
Template lainnya berhubungan dengan semua tipe Mahasiswa, Kursus, dll. Berikut adalah kode untuk kelas Mahasiswa yang dihasilkan secara otomatis dari Model Entitas.
namespace ConsoleApplication1 {
using System;
using System.Collections.Generic;
public partial class Student {
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage",
"CA2214:DoNotCallOverridableMethodsInConstructors")]
public Student() {
this.Enrollments = new HashSet<Enrollment>();
}
public int ID { get; set; }
public string LastName { get; set; }
public string FirstMidName { get; set; }
public System.DateTime EnrollmentDate { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage",
CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Enrollment> Enrollments { get; set; }
}
}
Kelas serupa dibuat untuk tabel Kursus dan Pendaftaran dari Model Entitas.
Proxy Dinamis
Saat membuat instance dari tipe entitas POCO, Entity Framework sering membuat instance dari tipe turunan yang dihasilkan secara dinamis yang bertindak sebagai proxy untuk entitas. Dapat juga dikatakan bahwa itu adalah kelas proxy runtime seperti kelas pembungkus entitas POCO.
Anda dapat mengganti beberapa properti entitas untuk melakukan tindakan secara otomatis saat properti diakses.
Mekanisme ini digunakan untuk mendukung pemuatan lambat hubungan dan pelacakan perubahan otomatis.
Teknik ini juga berlaku untuk model yang dibuat dengan Code First dan EF Designer.
Jika Anda ingin Entity Framework mendukung pemuatan lambat objek terkait dan melacak perubahan dalam kelas POCO, maka kelas POCO harus memenuhi persyaratan berikut -
Kelas data khusus harus dideklarasikan dengan akses publik.
Kelas data khusus tidak boleh disegel.
Kelas data khusus tidak boleh abstrak.
Kelas data khusus harus memiliki konstruktor publik atau dilindungi yang tidak memiliki parameter.
Gunakan konstruktor yang dilindungi tanpa parameter jika Anda ingin metode CreateObject digunakan untuk membuat proxy untuk entitas POCO.
Memanggil metode CreateObject tidak menjamin pembuatan proxy: kelas POCO harus mengikuti persyaratan lain yang dijelaskan dalam topik ini.
Kelas tidak dapat menerapkan antarmuka IEntityWithChangeTracker atau IEntityWithRelationships karena kelas proxy menerapkan antarmuka ini.
Opsi ProxyCreationEnabled harus disetel ke true.
Contoh berikut adalah kelas entitas proxy dinamis.
public partial class Course {
public Course() {
this.Enrollments = new HashSet<Enrollment>();
}
public int CourseID { get; set; }
public string Title { get; set; }
public int Credits { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; }
}
Untuk menonaktifkan pembuatan objek proxy, setel nilai properti ProxyCreationEnabled ke false.