• 1400/01/16

حذف نکردن رکوردی که در جداول دیگه استفاده شده :

سلام وقت بخیر

من دو تا جدول کارمند و ثبت اطلاعات دارم که یکی از فیلدهای ثبت اطلاعات  به کارمند اشاره دارد

زمانیکه که کارمند حذف میکنم اطلاعات ثبت اطلاعات هم حذف میشود

میخوام اگر کاربر دکمه حذف رو زد در صورتی که در جدول ثبت اطلاعات وحود داشت ،حذف نکند

ممنون میشم پیشنهادتون رو بفرمایید

  • 1400/01/16
  • ساعت 15:24

سلام 

در حالت عادی ارور میده مگر شما تغییر داده باشید 

باید Any هم میتونید چک کنید هست یا نه


  • 1400/01/16
  • ساعت 15:27

سلام دوست عزیز

دلیل این حذف شدن فعال بودن Cascade Delete توی  ForeignKey های جداولتون هست، شما 2 تا راه حل برای رفع اشکالتون دارید :

1. استفاده از SqlManagemenetStudio هست، به این صورت که جداولی که نمیخواید اطلاعاتتون توش پاک بشه رو روی حالت Design باز میکنید، روی کلید خارجی اون جدول کلیک راست میکنید و گزینه RelationShip رو میزنید، از کادر سمت چپ میتونید ForeignKey هارو ببینید، یکی یکی روشون کلیک کنید و از وسط صفحه گزینه Insert And Update Specification رو بازکنید و مقادیر جلوی Delete Rule  و Update Rule رو برابر با No Action بزارید

2. میتونید توی Context خودتون از کد زیر توی متد OnModelCreating استفاده کنید تا این تنظیمات برای همه جداول انجام بشه.

نکته : برای این کار باید DataBase و Migration ها رو حذف کنید و مجددا بسازید

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            var cascadeFKs = modelBuilder.Model.GetEntityTypes()
                .SelectMany(t => t.GetForeignKeys());            

            foreach (var fk in cascadeFKs)
                fk.DeleteBehavior = DeleteBehavior.NoAction;
        }

البته این رو در نظر بگیرید اگر این کار رو کردید دیگه بعد از زدن دکمه حذف با Exception روبرو میشید و باید اونهارو خودتون هندل کنید و یا پیغام مناسب به کاربرتون نشون بدید

موفق باشید


logo-samandehi