SORU
18 Temmuz 2013, PERŞEMBE


Varlık Çerçevesi .() Kaldırma vs .()DeleteObject

Bir veritabanı aşağıdaki iki yöntemi kullanarak EF kullanarak bir öğeyi kaldırabilirsiniz.

İlk EntityCollection ve ObjectContext ikinci.

Her zaman kullanılmalıdır?

Bir diğer üzerinde tercih edilmektedir?

Remove() bool DeleteObject() döner void verir.

CEVAP
18 Temmuz 2013, PERŞEMBE


Genellikle bu doğru değil "bir veritabanından bir öğeyi kaldırmak" her iki yöntem ile. Kesin olarak söylenebilir

  • ObjectContext.DeleteObject(entity) işaretleriDeleted olarak varlıkbu bağlamda. (EntityState sonra Deleted.) Eğer SaveChanges ararsan daha sonra EF veritabanı DELETE SQL deyimi gönderir. Eğer veritabanında herhangi bir bilgi tutarlılığı kısıtlamaları ihlal edilirse varlık silinir, aksi takdirde bir istisnası atılır.

  • EntityCollection.Remove(childEntity) işaretleriDeleted gibi üst ve childEntity arasındaki ilişki. childEntity eğer veritabanından silinir ve tam olarak SaveChanges çağırdığınızda ne olur ikisi arasında bir ilişki bağlıdır:

    • Eğer ilişki varsaisteğe bağlıyani yabancı anahtar başvuran çocuk için ana veritabanı sağlar NULL değerleri, bu yabancı ayarlanır boş ve seni çağırır SaveChanges NULL değer childEntity olacak yazılmış veritabanı (yani arasındaki ilişkiyi iki kaldırılır). Bu UPDATE SQL deyimi ile olur. DELETE hiçbir ifade oluşur.

    • Eğer ilişki varsagerekli(FK NULL değerleri izin vermez) ve ilişkidirtanımlama değil(bu demek oluyor ki yabancı anahtar bir parçası değildir ve çocuğun (bileşik) birincil anahtar) da eklemek çocuk için bir ebeveyn ya da açık olarak silmek çocuk (*ile 24* sonra). Eğer bunlardan herhangi biri sizin olsaydı zaten başvuru kısıtlaması ihlal edildi ve EF SaveChanges - rezil çağırdığınızda bir özel durum oluşturur"The relationship could not be changed because one or more of the foreign-key properties is non-nullable"istisna veya benzer.

    • Eğer ilişki varsatanımlama(mutlakagereklibirincil anahtar herhangi bir bölümünü NULL) olamaz, çünkü o zaman EF Deleted childEntity de damgasını vuracak. SaveChanges SQL ararsan DELETE deyimi veritabanına gönderilecektir. Eğer veritabanı başka bir başvuru kısıtlamaları ihlal edilirse varlık silinir, aksi takdirde bir istisnası atılır.

Diyor, çünkü aslında biraz da size bağlı Remarks section on the MSDN page hakkında kafam karışık: "Eğer ilişkinin tutarlılığına bir kısıtlama varsa, bağımlı bir nesne üzerinde yöntem Kaldırmak arıyorum ilişki ve silme için bağımlı nesne her iki işaretleri.". Bu üç dosyayı da yukarıda bir çünkü ya bana unprecise bile yanlış geliyor "tutarlılığı kısıtlama" ama son durumda çocuk aslında silinir. em (Demek "bağımlı nesne"bir tanımlama ilişki içinde yer aldığı bir nesnenin alışılmadık bir terminoloji olsa da olur.) em

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kamikazeepanda

    Kamikazeepan

    5 ŞUBAT 2006
  • Mark Brown

    Mark Brown

    9 HAZİRAN 2010
  • MyTiredBones

    MyTiredBones

    2 Temmuz 2013