2016-08-20 10 views
5

Projemde EF 6 kullanıyorum, bir tablodaki bir satırı silmek istediğimde, bu satır başka bir tabloda başvurulan olduğundan istisna yok. C# kodu ve EF ile silmeyi engelleyen tabloyu bilmek istiyorum. Entity Framework 6 ile bir satırı silmem için hangi tabloyu nasıl önlerim?

enter image description here

Biz tablo A'da bir kayıt var ve bu satır o EF o tablo C konusu satırı silmesini beni engellemek bilmek mümkün değil midir tablo B'de tablo C başvurulmaktadır? dinamik kullanıcıyı göstermek veya silme girişimi öncesinde belirlemek için çalışma zamanında bu sıralamak için çalışıyoruz ve size sys tabloları kullanabilirsiniz olası çatışma emin değilseniz Ayrıca Sql-Sunucusu 2012.

+3

Üç düşünceler: ayrıştırmak istisna; önce varlığı okuyun ve çocuk varlıkları inceleyin; basamaklı geçişi sil –

+0

Veritabanı sunucusu (EF değil), sunucuda oluşturulmuş bir ilişki varsa üst tablonun silinmesini önler. Bu betiği ilişkiyi tanımak için çalıştırın: http://stackoverflow.com/a/8095137/3142139. –

cevap

0

kullanıyorum

ve bunu sıralamak için bazı dinamik sql.

  1. Tablo adınızı bulmak ve bir object_id almak için sys.objects'u kullanın.
  2. Tablonuzu referans alan tabloları bulmak için sys.foreign_keys kullanın.
  3. Sys kullanın. Başvurulan sütun numaralarını tam olarak almak için foreign_key_columns.
  4. Uygun sütun adlarını almak için sys.columns kullanın.
  5. Tablo ve sütun adlarını aramak ve silinemeyen kaynak satırındaki değerleri kullanarak hatalı satırları bulmak için dinamik SQL oluşturun.
  6. sys.objects içinde bakılan tabloları listeleyin. İsteğe bağlı olarak satır sayısını listeleyin.
  7. İsteğe (örn kayıtları rencide silmek bununla ilgilenir - - - Bu özyinelemeli olması gerekebilir Eğer çok fazla veri kaybedebilirsiniz!) Diğer ifadeleri oluşturmak için dinamik SQL kullanmak
İlgili konular