SORU
19 Kasım 2008, ÇARŞAMBA


Nasıl çocuk sil Arabiriminin için nesne mi?

Çocuk nesneleri bir IList ile bir çok ilişkisi olan bir üst nesne var. Çocuk nesneleri silmek için en iyi yolu nedir? Üst silme değilim. Benim ana nesnenin alt nesneleri bir IList içerir. Burada bir çok ilişki için: eşleme

<bag name="Tiers" cascade="all">
  <key column="mismatch_id_no" />
  <one-to-many class="TGR_BL.PromoTier,TGR_BL"/>
</bag>

Eğer koleksiyonundan tüm nesneleri temizlemek kullanarak kaldırmak için çalışırsanız, o Ara SaveOrUpdate(), bu özel durum:

System.Data.SqlClient.SqlException: Cannot insert the value NULL into column

Eğer tek tek sonra üst çıkarıp çocuk nesneleri silmek için çalışırsanız, bir istisna olsun:

deleted object would be re-saved by cascade

Bu Arabiriminin ilk kez silme alt nesneleri ile uğraşıyor. Neyi yanlış yapıyorum?

edit: Sadece netleştirmek için - üst nesnenin alt nesneleri silmeye çalışıyorum. İlişki üst çok sayıda biri olarak ayarladım. Ayrıca çocuk nesne eşleştirme çok-bir ilişki oluşturmak gerekiyor mu?

CEVAP
19 Kasım 2008, ÇARŞAMBA


Sen koleksiyonundan öğeleri kaldırdığınızda, operasyon Arabiriminin varsayılan mod sadece dernek kırmak için, çünkü ilk hata alınıyor. Veritabanında null Arabiriminin alt satırda yabancı anahtar sütun ayarlamak için çalışır. Bu sütun boş değerlere izin vermez beri, SQL Server hata yükseltir. Koleksiyon takas ille de çocuk nesne, ama bunu yapmak için bir yol cascade ayarlamak için=tüm silmek-yetim silmez. Bu yabancı anahtar sütunu ayarı yerine artık yeni satırları sil gerektiğini Arabiriminin bildirir.

SaveOrUpdate aradığınızda Arabiriminin ilk çocuk tüm nesneleri siler çünkü ikinci bir hata alıyorsanız. Ne ilişki ters olarak işaretlendi çünkü daha sonra, Arabiriminin de boş çocuk tablosundaki yabancı anahtar sütun ayarlamak için çalışır. Satırlar zaten silinmiş olduğundan, ikinci bir hata alırsınız. Ters=bunu düzeltmek için ilişkinin bir tarafında doğru ayarlamak gerekir. Bu genellikle bir birincil anahtar veya üst) tarafında yapılır. Eğer bunu yaparsan, Arabiriminin ilişki her iki taraf için uygun güncellemeleri yapar. Ne yazık ki, iki güncellemeler yapmak için uygun bir şey değildir.

Her zaman ters tarafı gibi ilişkilerinin bir tarafı işaretlemeniz gerekir. Nasıl kodu, bağlı olabilir veya basamaklı kullanmaya gerek olmayabilir. Eğer bir atış Yararlanmak istiyorsanız kullanarak Temizlemek için çalışıyoruz olarak siler(), Çağlayan tanımlamak gerekir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GALERNAYA20

    GALERNAYA20

    19 NİSAN 2011
  • humanHardDrive

    humanHardDri

    16 Mart 2011
  • Schmittastic Jr.

    Schmittastic

    19 Mart 2013