Pertanyaan Mengapa ON DELETE SET NULL masih belum diimplementasikan dalam Entity Framework 6? Apakah ada halangan?


Masih tidak mungkin untuk mengkonfigurasi relasi dengan aturan DELETE SET NULL menggunakan kode Entity Framework terlebih dahulu. Sebagai solusi, Anda harus memuat semua entitas terkait dalam memori dan kemudian pada penghapusan entitas induk EF akan mengeluarkan perintah SQL untuk mengatur kunci asing mereka ke Null.

Ini, sementara itu sepele untuk menerapkan ini sendiri menggunakan sesuatu seperti:

protected override void Seed(Context context)
{
    context.Database.ExecuteSqlCommand("ALTER TABLE dbo.Guests DROP CONSTRAINT Guest_PreferredLanguage");
    context.Database.ExecuteSqlCommand("ALTER TABLE dbo.Guests ADD CONSTRAINT Guest_PreferredLanguage FOREIGN KEY (LanguageID) REFERENCES dbo.Languages(LanguageID) ON UPDATE NO ACTION ON DELETE SET NULL");
}

(Contoh ambil dari posting ini.)

Saya tidak dapat melihat masalah dengan pendekatan ini: Entitas anak yang dimuat akan tetap sinkron dengan database karena EF akan memperbarui (ditetapkan ke null) kunci asing dan properti Referensi mereka, dan bahwa catatan lain dalam basis data yang terpengaruh tidak merugikan karena mereka memiliki belum dimuat juga.

Jadi, mengapa fitur ini masih hilang? Apakah ada jebakan tersembunyi?


32
2018-01-05 09:46


asal


Jawaban:


Fitur ini mungkin tidak diterapkan karena biasanya perubahan hanya mempengaruhi objek yang sebenarnya di unit kerja. Cascades tidak bisa diskalakan.

Dan saya juga berpikir soft delete lebih baik dalam banyak kasus. Mungkin itu sesuatu untukmu?

Anda mungkin juga ingin melihat ke dalam desain Domain Driven. Itu juga mencakup penggunaan unit kerja yang benar (dengan agregat).

Btw solusi Anda mengedit database dalam metode pembenihan. Mungkin lebih baik untuk melakukan itu metode () Up dari migrasi.


2
2018-06-29 10:14