none
Tablo kısıtlarıyla ilgili bir problem! RRS feed

  • Soru

  • tabloların ilişkileri yukarıdaki gibidir.
    yani 1 numaralı user'in arkdaşları 2,3,8 ve 7 numaralı userlar (2 ve 3 numaralı arkadaşları  okul arkadaşları, 8 numaralı olan ev arkadaşı, 9 ise hem iş hemde ev arkadaşı)
    2 numaralı user'in arkadaşı 1 numaralı user(ev arkadaşı)
    Benim problemim şu;
    User tablosundan herhangi bir user silindiğinde friend tablosundan o user_id ilişkili tüm kayıtların silinmesi(delete rule cascade seçeneği aktif durumda)
    ve silinen user herhangibirinin arkadaşı ise friend_user_id ile ilişkili tüm kayıtların silinmesi gerekli yani 2 numaralı user silindiğinde
    friend tablosundan 1. kayıt silinmeli. (delete rule cascade seçeneği aktif durumda)

    bu kısıtları oluşturduğumda aşağıdaki hatayı alıyorum yardımcı olursanız sevinirim.
    'User' table saved successfully
    'Friend' table
    - Unable to create relationship 'FK_Friend_User2'.  
    Introducing FOREIGN KEY constraint 'FK_Friend_User2' on table 'Friend' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
    Could not create constraint. See previous errors.




    9 Kasım 2011 Çarşamba 20:57

Yanıtlar

  • sql server a gelip tools menüsünden options tıklayın designers dan table and database designers tıklayın sağda çıkan seçeneklerden prevent saving changes that require table re-creation un tikini kaldırın
    • Yanıt Olarak Öneren Ali Çalı 30 Kasım 2011 Çarşamba 09:33
    • Yanıt Önerisini Geri Alan Ali Çalı 30 Kasım 2011 Çarşamba 09:37
    • Yanıt Olarak İşaretleyen Osman Shener 4 Nisan 2012 Çarşamba 09:03
    12 Kasım 2011 Cumartesi 16:05
  • Merhaba,

    User ve Friend tabloları arasında kurulan ilişkide Delete Role Cascade seçildiğine göre User tablosundan bir kayıt sildiğinde Friend tablosunda silinen kayıt ile ilişkili olan kayıtlarda silinecektir. Buraya kadar sorun yok. Sorun şu ki; User tablosundan sildiğimiz kayıtla ilişkili olan Friend tablosundaki bir kayıt otomatik olarak siliniyorken Friend tablosu ile ilişkili olan FriendsInLists tablosundaki bağlı kayıtlarında silinmesi gerekiyor.

    Bu durumda Friend ile FriendsInLists tablosu arasında oluşturulan ilişkide de Delete Role Cascade olarak ayarlanmalı.

    Kolay gelsin.


    • Düzenleyen Ali Çalı 30 Kasım 2011 Çarşamba 09:50
    • Yanıt Olarak İşaretleyen Osman Shener 4 Nisan 2012 Çarşamba 09:03
    30 Kasım 2011 Çarşamba 09:49

Tüm Yanıtlar

  • aslında cevabını kendin vermişsin ancak koda dökemedin sanırım

    silinmesi gerekenleri yazdıgın gibi silersen problem kalmaz.

    örneğin silinecek user ın idsini alırsın

    bu user id yisorguyla

    List<Friends> frn= entity.friends.where(x=> x.userId==silmekistediğinuserıd).Tolist();

    foreach(Friends item  in  frn)

    {

      bu sekilde dönerek sileceğin user_id ye ait arkadaş listeni aldın ve bu user_id e denk gelen friends listeni olusturdun

    burada her bir friens id icin tekrar bir liste olusturup(Friendinlist) o liste içerisinde de foreach le dönerek silme işlemini yaparsın silme işlemi içten dısa örneğin friendinlist silinir foreach ten cıkınca friends tablosundan veriler silinir ve en son user tablosundan user silinir.

    yukardaki sorgu bildiğin linq - entity sorgusu bu sorguyu kullandıgın işleme göre değiştirebilirsin önemli olan sorgularda liste seklinde toplayıp foreach te dönmen

         List<FriendinList> frninlst= entity.friendinlists.where(x=> x.fil_id==item.fil_id).Tolist();

         foreach(FriendinList item2 in frninlst)

             {

             }

    }

    9 Kasım 2011 Çarşamba 21:59
  • Yanıtınız için teşekkür ederim ama benim problemim kodla ilgili değil ben yukarıda gösterdiğim ilişkiyi kuramıyorum diyagramı kaydetmeye çalıştığımda yukarıdaki hata ile karşılaşıyorum.(sql server 2008 kullanıyorum)

    9 Kasım 2011 Çarşamba 22:24
  • sql server a gelip tools menüsünden options tıklayın designers dan table and database designers tıklayın sağda çıkan seçeneklerden prevent saving changes that require table re-creation un tikini kaldırın
    • Yanıt Olarak Öneren Ali Çalı 30 Kasım 2011 Çarşamba 09:33
    • Yanıt Önerisini Geri Alan Ali Çalı 30 Kasım 2011 Çarşamba 09:37
    • Yanıt Olarak İşaretleyen Osman Shener 4 Nisan 2012 Çarşamba 09:03
    12 Kasım 2011 Cumartesi 16:05
  • Merhaba,

    User ve Friend tabloları arasında kurulan ilişkide Delete Role Cascade seçildiğine göre User tablosundan bir kayıt sildiğinde Friend tablosunda silinen kayıt ile ilişkili olan kayıtlarda silinecektir. Buraya kadar sorun yok. Sorun şu ki; User tablosundan sildiğimiz kayıtla ilişkili olan Friend tablosundaki bir kayıt otomatik olarak siliniyorken Friend tablosu ile ilişkili olan FriendsInLists tablosundaki bağlı kayıtlarında silinmesi gerekiyor.

    Bu durumda Friend ile FriendsInLists tablosu arasında oluşturulan ilişkide de Delete Role Cascade olarak ayarlanmalı.

    Kolay gelsin.


    • Düzenleyen Ali Çalı 30 Kasım 2011 Çarşamba 09:50
    • Yanıt Olarak İşaretleyen Osman Shener 4 Nisan 2012 Çarşamba 09:03
    30 Kasım 2011 Çarşamba 09:49