Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengawal Kegigihan Entiti Kanak-Kanak dalam Rangka Kerja Entiti?

Bagaimanakah Saya Boleh Mengawal Kegigihan Entiti Kanak-Kanak dalam Rangka Kerja Entiti?

Mary-Kate Olsen
Lepaskan: 2025-01-03 06:23:44
asal
279 orang telah melayarinya

How Can I Control Child Entity Persistence in Entity Framework?

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;
    }
}
Salin selepas log masuk

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;
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan