خطای cycles or multiple cascade paths

خطای cycles or multiple cascade paths

بسم الله الرحمن الرحیم

خطای زیرا شاید خیلی از شما دوستان عزیز نیز مشاده کردید:

Introducing FOREIGN KEY constraint 'FK_dbo.aspnet_UsersInRoles_dbo.aspnet_Users_UserId' on table 'aspnet_UsersInRoles' 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. See previous errors

برای حل این مشکل می توانید از Fluid API استفاده کنید،

در این مثل اگر من کد زیر را به Context خود اضافه کنم مشکل بالا برطرف خواهد شد:

protected override void OnModelCreating( DbModelBuilder modelBuilder )
{

        modelBuilder.Entity<aspnet_UsersInRoles>().HasMany(i => i.Users).WithRequired().WillCascadeOnDelete(false);
}

همچنین با استفاده از این کد می توانید تمامی CASCADE DELETES ها را از بین ببرید:

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

اینم مشکل زمانی رخ می دهد که شما در طراحی دیتابیس خود یک چرخه یا Loop ایجاد کرده اید مانند تصویر زیر:

بسم الله الرحمن الرحیم

خطای زیرا شاید خیلی از شما دوستان عزیز نیز مشاده کردید:

Introducing FOREIGN KEY constraint 'FK_dbo.aspnet_UsersInRoles_dbo.aspnet_Users_UserId' on table 'aspnet_UsersInRoles' 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. See previous errors

برای حل این مشکل می توانید از Fluid API استفاده کنید،

در این مثل اگر من کد زیر را به Context خود اضافه کنم مشکل بالا برطرف خواهد شد:

protected override void OnModelCreating( DbModelBuilder modelBuilder )
{

        modelBuilder.Entity<aspnet_UsersInRoles>().HasMany(i => i.Users).WithRequired().WillCascadeOnDelete(false);
}

همچنین با استفاده از این کد می توانید تمامی CASCADE DELETES ها را از بین ببرید:

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

اینم مشکل زمانی رخ می دهد که شما در طراحی دیتابیس خود یک چرخه یا Loop ایجاد کرده اید مانند تصویر زیر:

multiple cascade

اگر به متن خطای بالا دقت کنید مشاهده خواهید کرد که عبارت may cause cycles or multiple cascade paths قید شده است، همان طور که خدمتتان عرض کردم، اگر در طراحی دیتابیس شما چندین جدول را به صورت بالا طراحی کنید که با یکدگیر در ارتباط باشند و این ارتباط به صورت یک چرخه شود، و سعی کنید بر روی این چرخه CASCADE ایجاد کنید، SQL Server نمی تواند متوجه بشود که چطور فرایند بروز رسانی Update CASCADE یا حذف Delete CASCADE شما را مدیریت کند زیرا هر یک از این جداول بر روی یکدیگر تاثیر می گذارند و در صورتی که فرایند CASCADE آغاز شود نقطه پایانی وجود نخواهد داشت.

Delete CASCADE و Update CASCADE

برای حل این مشکل می توانید به صورت زیر عمل کنید:

1- فرایند CASCADE را غیر فعال کنید (در صورت غیر فعال کردن باید این فرایند را به صورت Manually مدیریت کنید)

2- Relation را حذف کنید (در صورت حذف کردن باید این فرایند را به صورت Manually مدیریت کنید)

طراحی دیتابیس

در چنینی شرایطی معمولا طراح دیتبیس اشتباهی را مرتکب شده است، پس بهتر است از او بخواهید تا دیتابیس خود را مجددا بررسی کنید، زیرا مدیریت کردن راه حل های بالا که قید شد کمی دقت لازم دارد

انشالله در اولین فرصت روش های ایجاد Relation را در MVC معرفی خواهم کرد

نظرات

  • Hannah Martinez
    محمدجواد
    دو شنبه 11 دی 1278 - 0:00

    خیلی خوب بود تشکر برای اینکه این مشکل را حل کنم کد ها را باید کجا وارد کنم؟ من دارم یک نرم افزار طراحی می کنم و فعلا دارم DB درست میکنم. لطفا اگر امکان دارد جواب را با شرح و بسط برای بنده ایمیل کنید.

    • Judith Bell
      پاسخ
      مدیروب سایت
      دو شنبه 11 دی 1278 - 0:00

      سلام دوست عزیز. شما این کدها را در کلاس contex خود وارد کنید.

      موفق باشید

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس