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.
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.
692b1c8d-cce7-4097-ad1d-204c9e962cf1|0|.0