Properti bayangan adalah properti yang tidak ditentukan dalam kelas entitas .NET tetapi ditentukan untuk jenis entitas tersebut dalam model EF Core. Nilai dan status atribut ini dipertahankan murni di pelacak perubahan. Properti berarsir berguna ketika data dalam database tidak boleh diekspos pada jenis entitas yang dipetakan. Inti Kerangka Kerja Entitas memperkenalkan jenis atribut baru yang disebut atribut "bayangan", yang tidak ada di EF 6.x.
Atribut bayangan tidak ada. Kelas entitas .NET. Sebagai gantinya, Anda dapat mengonfigurasinya untuk jenis entitas tertentu dalam model data entitas. Ini dapat dikonfigurasi dalam metode OnModelCreating() dari kelas konteks.
Diagram berikut mengilustrasikan atribut bayangan.
Seperti yang ditunjukkan pada gambar di atas, atribut bayangan bukan milik kelas entitas Anda. Oleh karena itu, Anda tidak dapat mengaksesnya saat mengakses properti entitas lainnya. Properti yang diarsir hanya dapat dikonfigurasi untuk jenis entitas saat membangun model data entitas, dan juga akan dipetakan ke kolom database. Nilai dan status properti bayangan hanya dipertahankan di pelacak perubahan.
Mari kita pahami aspek praktis dari sifat bayangan. Katakanlah kita perlu mempertahankan tanggal pembuatan dan pembaruan setiap catatan dalam tabel database. Anda mempelajari cara mengatur tanggal pembuatan dan modifikasi untuk entitas di EF Core dengan menentukan properti CreatedDate dan UpdatedDate di kelas entitas. Di sini kita akan melihat cara mencapai hasil yang sama dengan menggunakan properti bayangan alih-alih menyertakan properti bayangan dalam kelas entitas.
Pertimbangkan kelas entitas Siswa berikut.
Kelas Siswa di atasAtribut CreatedDate dan UpdatedDate tidak disertakanuntuk mempertahankan waktu saat dibuat atau diperbarui. Kami mengonfigurasinya sebagai properti bayangan pada entitas Siswa.
Menentukan properti bayangan
Anda dapat menggunakan metode OnModelCreating() untuk menentukan properti bayangan untuk jenis entitas menggunakan Fluent API.
Konfigurasi berikut mengonfigurasi dua properti berlindung, CreatedDate dan UpdatedDate, untuk entitas Siswa.
Seperti yang Anda lihat, metode Property() digunakan untuk mengonfigurasi properti bayangan. Tentukan nama properti bayangan sebagai string dan jenis sebagai parameter generik. Jika nama yang ditentukan dalam metode Property() cocok dengan nama properti yang ada, EF Core akan mengonfigurasi properti yang ada sebagai properti bayangan alih-alih memperkenalkan properti bayangan baru.
Properti bayangan dalam database
Setelah properti bayangan ditentukan, kita perlu memperbarui skema database karena properti bayangan akan dipetakan ke kolom database yang sesuai.
Untuk melakukan ini, tambahkan migrasi database di konsol Manajer Paket Visual Studio menggunakan perintah berikut.
Tabel Siswa sekarang akan menyertakan dua kolom, CreatedDate dan UpdatedDate di SQL Server, seperti yang ditunjukkan di bawah ini.
Jadi bahkan jika kita tidak menyertakan properti ini di kelas Student dan mengonfigurasinya sebagai properti bayangan, database akan memiliki kolom yang sesuai.
Mengakses properti bayangan
Anda dapat menggunakan metode Property() untuk mendapatkan atau mengatur nilai properti bayangan di EntityEntry. Kode berikut mengakses nilai properti bayangan.
Namun, dalam skenario kita, kita ingin secara otomatis mengatur nilai ke properti bayangan ini pada metode SaveChanges() sehingga kita tidak perlu mengaturnya secara manual pada setiap objek entitas. Jadi, ganti metode SaveChanges() di kelas konteks seperti yang ditunjukkan di bawah ini.
Ini akan secara otomatis mengatur nilai untuk properti bayangan CreatedDate dan UpdatedDate.
Sekarang, jalankan kode berikut dan periksa catatan dalam database.
Kode di atas akan menyisipkan catatan berikut di CreatedDate dan UpdatedDate untuk Siswa.
Jadi dengan mengonfigurasi properti bayangan, kita tidak perlu memasukkannya ke dalam kelas entitas.
Mengonfigurasi properti bayangan pada semua entitas
Alih-alih mengonfigurasi properti bayangan secara manual pada semua entitas sekaligus, Anda dapat mengonfigurasinya secara manual.
Misalnya, kita dapat mengonfigurasi semua entitas CreatedDate dan UpdatedDate terakhir kali, seperti yang ditunjukkan pada gambar berikut.
Kapan harus menggunakan properti bayangan?
Atribut bayangan dapat digunakan dalam dua situasi:
Ketika Anda tidak ingin mengekspos kolom database pada entitas yang dipetakan, seperti skenario yang dibahas di atas. Saat Anda tidak ingin mengekspos atribut kunci asing tetapi hanya ingin menggunakan atribut navigasi untuk mengelola hubungan. Properti kunci asing akan menjadi properti bayangan dan akan dipetakan ke kolom database, tetapi tidak akan diekspos sebagai properti entitas. (Di EF Core, jika Anda tidak menentukan properti kunci asing dalam kelas entitas, itu akan secara otomatis menghasilkan properti bayangan untuk ini.) Anda tidak perlu mengonfigurasi properti kunci asing secara manual. )
Sumber daya:
Login hyperlink terlihat.
Login hyperlink terlihat.
|