我已经为此苦苦挣扎了一段时间,无法完全弄清楚发生了什么。我有一个卡片实体,其中包含边(通常是 2 个)-卡片和边都有一个阶段。我正在使用 EF Codefirst 迁移,迁移失败并出现以下错误:
在表“Sides”上引入 FOREIGN KEY 约束“FK_dbo.Sides_dbo.Cards_CardId”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
这是我的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; }
}
这是我的舞台实体:
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; }
迁移成功运行。如果我打开 SSMS 并查看表格,我可以看到Stage_StageId
已添加到Cards
(如预期/期望),但Sides
不包含对Stage
(未预期)的引用。
如果我再添加
[Required]
[ForeignKey("StageId")]
public virtual Stage Stage { get; set; }
public int StageId { get; set; }
在我的 Side 课程中,我看到StageId
我的表中添加了Side
列。
这是有效的,但现在在我的整个应用程序中,任何对Stage
包含 a 的引用SideId
,在某些情况下是完全不相关的。 如果可能的话,我只想给我Card
和Side
实体一个Stage
基于上述 Stage 类的属性,而不用引用属性污染舞台类......我做错了什么?