Memahami Gelagat Lalai Rangka Kerja Entiti: Kegigihan Objek Kanak-kanak
Apabila memanfaatkan Rangka Kerja Entiti (EF), pemetaan hubungan objek (ORM) yang diterima pakai secara meluas ) rangka kerja untuk .NET, adalah penting untuk mengetahui tingkah lakunya mengenai kanak-kanak entiti. Secara lalai, EF menganggap bahawa apabila entiti disimpan, sebarang objek kanak-kanak yang berkaitan harus disimpan bersamanya. Walau bagaimanapun, tindakan lalai ini boleh membawa kepada akibat yang tidak diingini, terutamanya jika anda berhasrat untuk melangkau kegigihan entiti kanak-kanak.
Sebab Mengecualikan Entiti Kanak-Kanak daripada Kegigihan
Anda mungkin menghadapi senario di mana menyelamatkan entiti kanak-kanak adalah tidak diingini. Contohnya, apabila data diisi secara manual daripada sumber luaran, seperti fail rata, entiti sedia ada dalam pangkalan data mungkin sudah memenuhi peranan entiti anak. Memasukkan pendua ke dalam pangkalan data boleh membawa kepada isu ketidakkonsistenan dan integriti. Selain itu, menyimpan entiti anak sebelum memberikan kunci utama kepada mereka boleh menghalang operasi EF yang betul.
Menguatkuasakan Kegigihan Terpilih: Keadaan Entiti Tidak Berubah
Untuk menangani cabaran melangkau kegigihan entiti kanak-kanak , anda boleh memanfaatkan pilihan EntityState.Unchanged. Dengan secara eksplisit menetapkan keadaan entiti anak kepada Tidak berubah, anda mengarahkan EF untuk mengabaikannya semasa operasi simpan.
Contoh Kod Menggunakan EntityState.Unchanged
Pertimbangkan perkara berikut contoh kod, dengan andaian anda mempunyai entiti Sekolah dengan anak City entiti:
public School Insert(School newItem) { using (var context = new DatabaseContext()) { context.Set<School>().Add(newItem); context.Entry(newItem.City).State = EntityState.Unchanged; context.SaveChanges(); return newItem; } }
Dengan menetapkan keadaan entiti Bandar kepada Tidak Berubah, EF akan mengecualikannya daripada operasi simpan, menjadikan pangkalan data tidak diubah. Walau bagaimanapun, pendekatan ini memerlukan pengendalian secara manual penugasan entiti kanak-kanak.
Penyelesaian Alternatif: Menggunakan Kunci Asing
Penyelesaian yang lebih elegan dan fleksibel melibatkan penggunaan kunci asing. Dengan mentakrifkan harta kunci asing dalam entiti anak anda, anda secara eksplisit menyatakan hubungannya dengan entiti induk. EF kemudiannya akan secara automatik mengendalikan keadaan entiti yang berkaitan berdasarkan rujukan yang diberikan.
Contoh Kod Menggunakan Kekunci Asing
Berikut ialah versi terkini bagi contoh kod sebelumnya menggunakan kunci asing :
public class School { public int Id { get; set; } public string Name { get; set; } [ForeignKey("City_Id")] public City City { get; set; } [Required] public int City_Id { get; set; } } public School Insert(School newItem, int cityId) { using (var context = new DatabaseContext()) { // Set child entity to null to prevent insertion newItem.City = null; // Specify foreign key relationship without adding the child entity newItem.City_Id = cityId; context.Set<School>().Add(newItem); context.SaveChanges(); return newItem; } }
Dalam kes ini, anda menetapkan City_Id secara manual dan membatalkan rujukan City, mengarahkan EF untuk mewujudkan sambungan melalui kunci asing tanpa melibatkan entiti anak. Pendekatan ini memudahkan kod dan mengelakkan keperluan untuk mengurus EntityState secara manual.
Kesimpulan
Memahami gelagat lalai Rangka Kerja Entiti dan menggunakan teknik yang sesuai, seperti EntityState.Tidak berubah atau menggunakan kunci asing, membolehkan pembangun mengawal dan menyesuaikan kegigihan entiti kanak-kanak, mencegah kesan sampingan yang tidak diingini dan memastikan integriti data dalam aplikasi mereka.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengawal Kegigihan Entiti Kanak-Kanak dalam Rangka Kerja Entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!