मैं इसके साथ थोड़ी देर के लिए कुश्ती कर रहा हूं और यह पता नहीं लगा सकता कि क्या हो रहा है। मेरे पास एक कार्ड इकाई है जिसमें साइड्स (आमतौर पर 2) हैं - और दोनों कार्ड्स और साइड्स में एक स्टेज है। मैं EF Codefirst माइग्रेशन का उपयोग कर रहा हूं और इस त्रुटि के साथ माइग्रेशन विफल हो रहे हैं:
मंच पर 'फ़ॉइड_डॉ.साइड_डेबो.साइड्स_कार्ड्स'कार्ड_ड' 'फ़ॉइंड डिज़ाइन की कमी के कारण साइकल या कई कैस्केड पथ हो सकते हैं। DELETE NO ACTION या UPDATE NO ACTION को निर्दिष्ट करें, या अन्य FOREIGN कुंजी बाधाओं को संशोधित करें।
यहाँ मेरी कार्ड इकाई है:
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; }
प्रवास सफलतापूर्वक चलता है। यदि मैं SSMS खोलता हूं और तालिकाओं को देखता हूं, तो मैं देख सकता हूं कि (जैसा कि अपेक्षित / इच्छित) 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; }