Melanjutkan kembali pembahasan tentang Entity Framework.
Misalkan kita mempunyai struktur tabel seperti gambar di bawah ini.
Jika kita buatkan class entity dari ketiga tabel di atas, class diagramnya akan terlihat seperti berikut :
Dari gambar class diagram di atas, kita bisa melihat bahwa class Siswa
, Guru
dan Pegawai
mempunyai beberapa property yang sama yaitu Jalan
, Kota
, Provinsi
dan KodePos
.
Untuk alasan desain class entity yang lebih baik sebaiknya kita pisahkan property Jalan
, Kota
, Provinsi
dan KodePos
ke dalam class tersendiri, misal dengan nama class Alamat
, kemudian masing-masing class entity Siswa
, Guru
dan Pegawai
menambahkan property baru dengan tipe class Alamat
, sehingga class diagram kita akan menjadi seperti berikut :
Nah class baru (Alamat) inilah yang akan menjadi pembahasan kita pada postingan kali ini yang dikenal dengan istilah Complex Types
atau Value Types
.
Sejak awal Entity Framework sudah mendukung Complex Types
atau yang dikenal juga dengan istilah value types
.
Complex Types
atau value types
bisa digunakan sebagai tipe data dari sebuah property sehingga ada kemiripan dengan class entity biasa yang sudah kita kenal, yang disebut dengan istilah entity types
.
Lalu di mana perbedaannya ?
Di dalam Entity Framework setiap entity types
harus mempunyai property key
sedangkan complex types
tidak.
Contoh :
Mendefinisikan Complex Types
Setelah mengetahui perbedaan antara entity types
dan complex types
kita juga harus mengetahui aturan dalam membuat complex types
.
Berikut aturan-aturan yang harus kita penuhi untuk membuat complex types
.
Complex types
tidak boleh mempunyaiproperty key
.- Semua property yang dimiliki
complex types
harus bertipe primitif. - Ketika digunakan sebagai tipe data oleh class lain, tidak boleh sebagai
collection type
harussingle instance
Contoh :
Konfigurasi Mapping (pemetaan) Complex Types
Untuk menyederhanakan contoh kode program, konfigurasi mapping (pemetaan) complex types
di bawah ini menggunakan konfigurasi Data Annotations. Saya sendiri lebih senang menggunakan konfigurasi Fluent API dengan tujuan agar class entity kita tetap bersih dari atribut-atribut Data Annotations.
Caranya adalah dengan mengedit class Alamat, kemudian menambahkan atribut Data Annotations
Terakhir kita coba untuk mengakses property dengan tipe complex types
Jika kode di atas dijalankan, akan menghasilkan output seperti berikut :
Selamat MENCOBA :)