PDA

View Full Version : حرفه ای: خطا بهنگام استفاده از دستور WillCascadeOnDelete در Ef Code First



Wily_Fox
پنج شنبه 23 آبان 1392, 14:44 عصر
با سلام و خسته نباشید

در یک پروژه ای چندماه مشغول هستیم این پروژه بر پایه Ef Code First پیاده سازی شده.

متنهی یه مشکلی داره، اینکه WillCascadeOnDelete در کل جدول های دیتابیس به ناچار false تعریف شده!!! توسط ذستور:

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

درواقع خواستیم true کنیم اما خطا میده.
پیغام خطا:
The foreign key component 'PageId' is not a declared property on type 'Page'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property.

خیلی هم جستجو کردم اما به هیچ نتیجه ای نرسیده ام. حتی به یه لینکی برخورد کردم که نوشته بود این مساله چالش بزرگی واسه تیم EF هست!!!

وقتی همه دستورات مربوط به WillCascadeOnDelete در DbContext رو حذف می کنم و دستور

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();


رو می نویسم پروژه بدون مشکل build میشه و همه بخش ها بدرستی اجرا میشه. فقط موقع حذف به مشکل بر می خورم.

بخش از کدهای مورد نظر در DbContext واسه انجام Cascade On Delete رو قرار میدم:


modelBuilder.Entity<Page>().HasRequired(p => p.PageGroup).WithMany(m => m.Page).HasForeignKey(m => m.PageGroupId).WillCascadeOnDelete(true);
modelBuilder.Entity<Page>().HasRequired(p => p.UserProfile).WithMany(m => m.Page).HasForeignKey(m => m.UserId).WillCascadeOnDelete(true);

modelBuilder.Entity<LikePage>().HasRequired(p => p.UserProfile).WithMany(m => m.LikePage).HasForeignKey(m => m.UserId).WillCascadeOnDelete(true);
modelBuilder.Entity<LikePage>().HasRequired(p => p.Page).WithMany(m => m.LikePage).HasForeignKey(m => m.PageId).WillCascadeOnDelete(true);

modelBuilder.Entity<PageContent>().HasRequired(p => p.Page).WithMany(m => m.PageContent).HasForeignKey(m => m.PageId).WillCascadeOnDelete(true);


اگه این مشکل رفع نشه آیا امکانش هست دیتابیس رو پس از پایان پروژه (پس از publsh کردن) دستکاری کرد؟
یعنی یه دستابیس ایجاد کنیم و CascadeOnDelete=true تو همه جدول ها بشه!!!