引入外鍵約束可能會導(dǎo)致循環(huán)或多個(gè)級聯(lián)路徑-為什么?我和這件事斗爭了一段時(shí)間了,我不太明白到底發(fā)生了什么事。我有一個(gè)卡片實(shí)體,其中包含側(cè)(通常2)-和卡片和兩邊都有一個(gè)舞臺。我使用的是EF CodeFirst遷移,但是這個(gè)錯誤導(dǎo)致遷移失敗:在表“側(cè)”上引入外鍵約束‘fk_dbo.ides_dbo.Cards_CardId’可能會導(dǎo)致循環(huán)或多個(gè)級聯(lián)路徑。指定“刪除不操作”或“更新不操作”,或修改其他外鍵約束。這是我的卡片實(shí)體: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; }}這是我的側(cè)實(shí)體: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; }}這是我的舞臺實(shí)體: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; } }}奇怪的是,如果我在舞臺課上加上以下內(nèi)容: public int? SideId { get; set; }
[ForeignKey("SideId")]
public virtual Side Side { get; set; }遷移成功運(yùn)行。如果我打開SSM,看看這些表,我可以看到Stage_StageId已添加到Cards(如預(yù)期/所需)Sides不包含引用Stage(未預(yù)期)。如果我再加上 [Required]
[ForeignKey("StageId")]
public virtual Stage Stage { get; set; }
public int StageId { get; set; }到我的旁聽課上,我明白了StageId列添加到我的Side桌子。這是可行的,但現(xiàn)在我的整個(gè)應(yīng)用程序中,任何引用Stage包含SideId在某些情況下是完全不相關(guān)的。我只想把我的Card和Side實(shí)體aStage屬性,如果可能的話,在不污染帶有引用屬性的Stage類的情況下,..我做錯什么了?
引入外鍵約束可能會導(dǎo)致循環(huán)或多個(gè)級聯(lián)路徑-為什么?
慕田峪9158850
2019-06-23 16:58:45