这件事我已经纠结了一段时间了,我不太明白发生了什么事.我有一个卡片实体,它包含两个侧面(通常是2个)-而且卡片和侧面都有一个stage.我正在使用EF CodeFirst迁移,迁移失败,错误如下:
引入外键约束‘fk_dbo.Sides_dbo.Cards_CardId’on 表‘侧’可能导致循环或多个级联路径.指定启用 DELETE NOT ACTION或ON UPDATE NO ACTION,或修改其它外键 约束.
以下是我的Card个实体:
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; }
}
以下是我的Side个实体:
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; }
}
这是我的Stage个实体:
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; } }
}
奇怪的是,如果我在Stage类中添加以下内容:
public int? SideId { get; set; }
[ForeignKey("SideId")]
public virtual Side Side { get; set; }
迁移成功运行.如果我打开SSM并查看表格,我可以看到Stage_StageId
已添加到Cards
(如预期/所需),但是Sides
未包含对Stage
(非预期)的引用.
如果我随后添加
[Required]
[ForeignKey("StageId")]
public virtual Stage Stage { get; set; }
public int StageId { get; set; }
在我的副课上,我看到Side
表中增加了StageId
列.
这是可行的,但在我的整个应用程序中,对Stage
的任何引用都包含SideId
,在某些情况下,这是完全无关的.I'd like to just give my 102 and 103 entities a 100 property based on the above Stage class without polluting the stage class with reference properties if possible... 我做错了什么?