Menindas Kegigihan Objek Kanak-kanak dalam Rangka Kerja Entiti
Dalam Rangka Kerja Entiti, secara amnya diandaikan bahawa menyimpan entiti akan mengekalkan objek anaknya secara automatik sebagai baiklah. Walau bagaimanapun, dalam senario tertentu, adalah wajar untuk mencegah tingkah laku ini. Ini amat berguna apabila berurusan dengan data yang diratakan yang mungkin tidak sepadan secara langsung dengan skema pangkalan data.
Mari kita pertimbangkan senario hipotetikal di mana entiti Sekolah mengandungi harta City. Semasa mengisi objek Sekolah daripada fail rata, harta City boleh merujuk jadual carian untuk menentukan lokasi geografi. Walau bagaimanapun, memandangkan takrifan bandar ini sudah wujud dalam pangkalan data, Rangka Kerja Entiti tidak perlu memasukkannya semula apabila menyimpan Sekolah.
Untuk menghalang Rangka Kerja Entiti daripada mengekalkan objek kanak-kanak dalam situasi sedemikian, terdapat dua pendekatan :
Pendekatan 1: Menggunakan EntityState
Satu pendekatan melibatkan menetapkan secara manual EntityState objek kanak-kanak kepada Tidak berubah. Ini mengarahkan Rangka Kerja Entiti untuk mengabaikan objek kanak-kanak semasa operasi simpan. Berikut ialah contoh:
using (var context = new DatabaseContext()) { context.Set<School>().Add(newItem); // Set the City property to Unchanged context.Entry(newItem.City).State = EntityState.Unchanged; context.SaveChanges(); }
Pendekatan 2: Menggunakan Kunci Asing
Pendekatan yang lebih elegan dan fleksibel ialah menggunakan sifat Kunci Asing dalam definisi entiti anda. Tentukan atribut Kunci Asing pada harta anak untuk menyatakan secara eksplisit hubungannya dengan entiti asing. Contohnya:
public class School { [ForeignKey("City_Id")] public City City { get; set; } [Required] public int City_Id { get; set; } }
Pendekatan ini membolehkan anda menentukan nilai kunci asing secara eksplisit semasa penciptaan objek, memaklumkan Rangka Kerja Entiti bahawa objek anak telah dikekalkan. Harta City boleh diabaikan daripada graf konteks dengan menetapkannya kepada batal apabila menyimpan:
newItem.City = null; context.Set<School>().Add(newItem); context.SaveChanges();
Dengan menggunakan salah satu daripada pendekatan ini, anda boleh menghalang Rangka Kerja Entiti daripada cuba menyimpan objek kanak-kanak, memastikan bahawa hanya entiti yang diingini diteruskan ke pangkalan data.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghalang Rangka Kerja Entiti daripada Objek Kanak-kanak Berterusan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!