ایجاد رابطه (چند به یک) در جدول بانک اطلاعاتی در Sql Server
من قصد دارم چند فیلد از یک جدول رو به یک جدول ربط بدم
بعنوان مثال : در جدول اول ما ID سه قلم رو می خواهیم در فیلد Loan1 و loan2 و loan3 وارد کنیم. که این ID رو از جدول Tashilat1 میگیره:
در زیر بخشی از مدل Parvandeh ارایه میشه که به اون فیلد ها که از جدول tashilat1 اشاره داره ارتباط داره :
public int Loan1 { get; set; }
[ForeignKey("Loan1")]
public virtual Tashilat1 Tashilat1 { get; set; }
public int Loan1Defined { get; set; }
public int Loan1Amount { get; set; }
public int Loan1Rate { get; set; }
public int Loan1NumOfInst { get; set; }
public int Loan2 { get; set; }
[ForeignKey("Loan2")]
public virtual Tashilat1 Tashilat2 { get; set; }
public int Loan2Defined { get; set; }
public int Loan2Amount { get; set; }
public int Loan2Rate { get; set; }
public int Loan2NumOfInst { get; set; }
public int Loan3 { get; set; }
[ForeignKey("Loan3")]
public virtual Tashilat1 Tashilat3 { get; set; }
public int Loan3Defined { get; set; }
public int Loan3Amount { get; set; }
public int Loan3Rate { get; set; }
public int Loan3NumOfInst { get; set; }
در Migration ایرادی نمی گیره ، اما در Update-Database با پیغام زیر ایراد میگیره :
Introducing FOREIGN KEY constraint 'FK_Parvandehs_tashilat1s_Loan2' on table 'Parvandehs' 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.
پیغام به طور خلاصه میگه روی کلید خارجی محدودیت ایجاد نکرده اید .
من نمی دونم چرا و چطور باید روی کلید خارجی محدودیت ایجاد کنم.
(این قسمت پس از دریافت پاسخ از کاربران به این سوال اضافه شد:)
این مشکل برای این است که در مدل اشاره به این نشده که فیلد میتونه خالی یا Null هم باشه ، لذا میگه اگر رکورد از فیلد والد حذف بشه در فیلد وارث ایجاد مشکل میکنه و ایجاد رکورد خالی میکنه .
که با توصیه دوستان بجای Int از نوع ?Int استفاده میکنیم تا Null هم قبول کنه.
به هر صورت بنده این کار رو انجام دادم و حل شد ( با تشکر از اساتید )
پاسخ هوش مصنوعی
برای حل مشکل شما که مربوط به ایجاد کلید خارجی (Foreign Key) در بانک اطلاعاتی Sql Server است، به نظر می رسد که شما به نوع داده ای که برای فیلدهای کلید خارجی تعریف کرده اید توجه نکرده اید.
با توجه به توضیحاتی که ارایه کردید، شما باید فیلدهای خود را به گونه ای تعریف کنید که بتوانند NULL را قبول کنند. بنابراین می توانید از نوع داده ی int?
به جای int
استفاده کنید. در زیر تغییرات لازم را مشاهده می کنید:
public int? Loan1 { get; set; }
[ForeignKey("Loan1")]
public virtual Tashilat1 Tashilat1 { get; set; }
public int Loan1Defined { get; set; }
public int Loan1Amount { get; set; }
public int Loan1Rate { get; set; }
public int Loan1NumOfInst { get; set; }
public int? Loan2 { get; set; }
[ForeignKey("Loan2")]
public virtual Tashilat1 Tashilat2 { get; set; }
public int Loan2Defined { get; set; }
public int Loan2Amount { get; set; }
public int Loan2Rate { get; set; }
public int Loan2NumOfInst { get; set; }
public int? Loan3 { get; set; }
[ForeignKey("Loan3")]
public virtual Tashilat1 Tashilat3 { get; set; }
public int Loan3Defined { get; set; }
public int Loan3Amount { get; set; }
public int Loan3Rate { get; set; }
public int Loan3NumOfInst { get; set; }
با این تغییرات، شما اجازه می دهید که فیلدهای کلید خارجی نیز خالی باشند و این به شما کمک می کند تا از بوجود آمدن مشکلات مربوط به مسیرهای چندگانه Cascade جلوگیری کنید.
پس از اعمال این تغییرات، سعی کنید دوباره عملیات Update-Database را انجام دهید و ببینید که آیا مشکل حل شده است یا خیر.
خطای شما در واقع خطای زیر هست (توی قسمتی که خطا رو نوشتید هم مشخص هست.)
Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths
این مورد قبلا سوال شده و پاسخ هم دریافت کرده. لینک زیر رو مطالعه کنید.
خطای Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths در مایگریشن
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2