Merhaba,
Entity’lerinizi yazarken tablolar arasında birden fazla bağlantı olduğunda yada entity sınıfınızın hem foreign key alıyor ve hem id’sini veriyorsa başka bir sınıfa,yani bire çok (one-to-many) veya çoklu (many-to-many) tasarıma sahipse; package manager console’da update-database komutunuz sonrası aşağıdaki gibi bir uyarıyı görürüz.
Introducing FOREIGN KEY constraint 'FK_dbo.XXXX_dbo.YYYY_UserID' on table 'XXXX' 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 or index. See previous errors.
Bu uyarıyı geçebilmek için bire çok bir tasarımsa OneToManyCascadeDeleteConvention sınıfını, çoklu tasarımsa ManyToManyCascadeDeleteConvention sınıfını Context sınıfımız içerisinde OnModelCreating metotumuzda kullanıyoruz.
Entity Framework ile çalışıyorsak;
modelBuilder.Conventions.Remove(<OneToManyCascadeDeleteConvention>);
Fluent Api Orm ile çalışıyorsak ;
modelBuilder.Entity(TabloAdı).HasMany(i => i.UserID).WithRequired().WillCascadeOnDelete(false);
bu sınıflar bize çoklu ilişki içindeki tablolarda cascade silme işlemi için sıralı bir şekilde silmeye izin verir. Biz ise bu gerekliliği modelimizden kaldırarak tablolarımızın sql server’da oluşmasına izin vermiş oluyoruz.