আমি কিছুক্ষণ ধরে এই নিয়ে কুস্তি করে যাচ্ছিলাম এবং কী ঘটছে তা পুরোপুরি বুঝতে পারছি না। আমার একটি কার্ড সত্তা রয়েছে যার মধ্যে সাইড রয়েছে (সাধারণত ২) - এবং কার্ড এবং সাইড উভয়েরই একটি স্টেজ থাকে। আমি ইএফ কোডফার্স্ট মাইগ্রেশন ব্যবহার করছি এবং মাইগ্রেশনগুলি এই ত্রুটির সাথে ব্যর্থ হচ্ছে:
বিদেশী মূল সীমাবদ্ধতার পরিচয় করিয়ে দেওয়া হচ্ছে 'এফকে_ডবো.সাইডস_ড্বো.কার্ডস_কার্ড আইডি' টেবিলের 'সাইডস'-এ চক্র বা একাধিক ক্যাসকেড পাথের কারণ হতে পারে। কোন পদক্ষেপ মুছে ফেলুন বা কোনও অ্যাকশন আপডেট করুন বা অন্যান্য বিদেশী কী বাধাগুলি সংশোধন করুন।
এখানে আমার কার্ড সত্তা:
public class Card
{
public Card()
{
Sides = new Collection<Side>();
Stage = Stage.ONE;
}
[Key]
[Required]
public virtual int CardId { get; set; }
[Required]
public virtual Stage Stage { get; set; }
[Required]
[ForeignKey("CardId")]
public virtual ICollection<Side> Sides { get; set; }
}
এখানে আমার সাইড সত্তা:
public class Side
{
public Side()
{
Stage = Stage.ONE;
}
[Key]
[Required]
public virtual int SideId { get; set; }
[Required]
public virtual Stage Stage { get; set; }
[Required]
public int CardId { get; set; }
[ForeignKey("CardId")]
public virtual Card Card { get; set; }
}
এবং এখানে আমার স্টেজ সত্তা:
public class Stage
{
// Zero
public static readonly Stage ONE = new Stage(new TimeSpan(0, 0, 0), "ONE");
// Ten seconds
public static readonly Stage TWO = new Stage(new TimeSpan(0, 0, 10), "TWO");
public static IEnumerable<Stage> Values
{
get
{
yield return ONE;
yield return TWO;
}
}
public int StageId { get; set; }
private readonly TimeSpan span;
public string Title { get; set; }
Stage(TimeSpan span, string title)
{
this.span = span;
this.Title = title;
}
public TimeSpan Span { get { return span; } }
}
সবচেয়ে মজার বিষয় হ'ল আমি যদি আমার স্টেজ ক্লাসে নিম্নলিখিতটি যুক্ত করি:
public int? SideId { get; set; }
[ForeignKey("SideId")]
public virtual Side Side { get; set; }
মাইগ্রেশন সফলভাবে চলে runs আমি যদি এসএসএমএস খুলি এবং টেবিলগুলিতে নজর রাখি তবে আমি দেখতে পাচ্ছি যে Stage_StageId
এতে যোগ হয়েছে Cards
(প্রত্যাশিত / পছন্দসই), তবে Sides
এর কোনও উল্লেখ নেই Stage
(প্রত্যাশিত নয়)।
আমি যদি তারপর যোগ
[Required]
[ForeignKey("StageId")]
public virtual Stage Stage { get; set; }
public int StageId { get; set; }
আমার সাইড ক্লাসে, আমি দেখতে পাচ্ছি StageId
কলামটি আমার Side
টেবিলে যুক্ত হয়েছে ।
এটি কাজ করছে, কিন্তু এখন আমার পুরো অ্যাপ্লিকেশন জুড়ে, এর কোনও রেফারেন্সে Stage
একটি রয়েছে SideId
যা কিছু ক্ষেত্রে সম্পূর্ণ অপ্রাসঙ্গিক। আমি সম্ভব হলে রেফারেন্স প্রোপার্টি সহ স্টেজ ক্লাসকে দূষিত না করে উপরের স্টেজ ক্লাসের উপর ভিত্তি করে আমার Card
এবং Side
সত্তাকে একটি Stage
সম্পত্তি দিতে চাই ... আমি কী ভুল করছি?
DeleteBehavior.Restrict
বা DeleteBehavior.SetNull
।
Side
ক্লাসে নলযোগ্য পূর্ণসংখ্যা যোগ করুন এবং[Required]
বৈশিষ্ট্যটি সরান =>public int? CardId { get; set; }