Ahmet Oğuz Koca

Sosyal olaylar.

Entity Framework ile ilişkili tablolardan kayıt silme

A relationship is being added or deleted from an AssociationSet 'FK_Table2_Table1'. With cardinality constraints, a corresponding 'Table2' must also be added or deleted.

Bu aralar projelerimde EF kullanıyorum ve muhtemelen Frameworkta bulunan bir hatadan kaynaklanıyor olacak ilişkili tablolardan kayıt silerken yukardaki hatayı alıyorsunuz. Ben kendi modelimde 1:Many:1 ilişkili bir kaydı silmeye çalıştığımda bu hatayı aldım.
Bu sorunu çözmek için internette yaptığım araştırmalar sonucunda yapılması gereken üç farklı adım olduğunu buldum. EF framework'u projelerinde kullanacak arkadaşlar için bu üç küçük adımı anlatmanın faydalı olacağına inandığım için sizlerle paylaşmak istedim.

Adım 1:
İlk olarak Sql Server'dan ilgili tablodaki ilişkiyi tanımlarken Cascade delete kuralını ekliyoruz.

sql resim

Adım 2:
Visual Studio 2008'de Model'imizi Update ediyoruz

Adım 3:
EF SSDL dosyasını update ederken yeni Casdace delete kuralımızı ekliyor lakin CSDL de bu eklemeyi yapmıyor. Kendi Elimizle bu eklemeyi yapmamız gerekmekte.

        <Association Name="FK_Comments_Posts">
            <End Role="Posts" Type="Mandelbrot01aModel.Posts" Multiplicity="1" >
                <OnDelete Action="Cascade"></OnDelete>
            </End>
          <End Role="Comments" Type="Mandelbrot01aModel.Comments" Multiplicity="*" />
        </Association>

 

Daha önce ObjectContext'ine aldığımız kaydı bu kodlarla siliyoruz

            var DelPost = (from p in MyEntity.Posts.Include("Comments")
                           where p.PostID == SesPost.PostID
                           select p).First();

                MyEntity.DeleteObject(DelPost);
                MyEntity.SaveChanges();

Not: Kodlar kolaylık olması açısından Linq to Entities kullanılarak yazıldı ama performans açısından object quesy ya da cached query kullanmanızı öneririm.  (Yanlış yönlendirme olmasın).


Modelimizi kaydederek çalıştırıyoruz.

Loading