我已经和这件事纠缠了一段时间,不太清楚到底发生了什么。我有一个卡实体,它包含两个边(通常是2个),并且卡和边都有一个舞台。我正在使用EF Codefirst迁移,迁移失败,出现以下错误:
在表“Sides”上引入外键约束“FK_dbo.Sides_dbo.Cards_cardd”可能会导致循环或多个级联路径。指定“在删除时不执行操作”或“在更新时不执行操作”,或修改其他外键约束。
这是我的卡实体:
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; }
迁移成功运行。如果我打开SSM并查看表格,我可以看到Stage\u StageId
已添加到卡中
(如预期/所需),但是侧边
未包含对阶段
(非预期)的引用。
如果我再加上
[Required]
[ForeignKey("StageId")]
public virtual Stage Stage { get; set; }
public int StageId { get; set; }
对于我的Side类,我看到StageId
列添加到我的Side
表中。
这是可行的,但现在在我的整个应用程序中,对Stage
的任何引用都包含一个SideId
,这在某些情况下是完全不相关的。我只想基于上述阶段类为我的卡
和侧
实体提供一个阶段
属性,如果可能,不使用参考属性污染阶段类。。。我做错了什么?
任何人想知道如何在EF核心:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
{
relationship.DeleteBehavior = DeleteBehavior.Restrict;
}
..... rest of the code.....
我有一个与其他表有循环关系的表,我得到了同样的错误。原来是关于外键的,它不能为空。如果键不能为空,则必须删除相关对象,循环关系不允许这样做。所以使用可为空的外键。
[ForeignKey("StageId")]
public virtual Stage Stage { get; set; }
public int? StageId { get; set; }
由于需要Stage
,因此涉及Stage
的所有一对多关系在默认情况下都将启用级联删除。这意味着,如果删除阶段
实体
端
因此,您有两个从阶段
到端
的级联删除路径,这会导致异常。
您必须在至少一个实体中将阶段
设置为可选(即从阶段
属性中删除[必需]
属性),或使用Fluent API禁用级联删除(数据批注不可能):
modelBuilder.Entity<Card>()
.HasRequired(c => c.Stage)
.WithMany()
.WillCascadeOnDelete(false);
modelBuilder.Entity<Side>()
.HasRequired(s => s.Stage)
.WithMany()
.WillCascadeOnDelete(false);
我收到了这个错误 在表“区域”上引入FOREIGN KEY约束“FK_dbo.Regions_dbo.Countries_CountryId”可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。无法创建约束。请参阅以前的错误。 我想知道这是否意味着我的数据库设计不好?我听说你关掉了级联之类的东西,但
问题内容: 尝试向表中添加约束时出现问题。我得到了错误: 在表“ Employee”上引入FOREIGN KEY约束“ FK74988DB24B3C886”可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。 我的约束是在一个表和一个表之间。该表包括,,,和。的具有多个字段的标号,从而可以存在对于每
我有很多课程,但在生产线上和机器上我有一些问题。ProductionLine类为: 机器类是: 当我想从这个类生成数据库时,我有这个错误: 引入外键约束“FK\u dbo”。TblMachine\u dbo。表“TblMachine”上的TblProductionLine\U FldProductionLineKey“可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON
我正在尝试更新数据库,但出现此错误。这件事我已经纠结了一段时间,不太清楚到底发生了什么。 引入外键约束“FK\u dbo”。注释\u dbo。表“Comments”上的Users\u UserId可能导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他外键约束。无法创建约束或索引。请参阅以前的错误。 这是我的用户类: 下面是我的评论
给大师们的一个快速问题。 我有2个EF模型课程: 基本上,我想先在代码中创建一对多关系。 但当我尝试这样做时,我会出现以下错误: 引入外键约束“FK\u dbo”。Teachers\u dbo。表“教师”上的“Schools\u SchoolId”可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他外键约束。 我哪里做错了?
我已经发现了许多其他类似的问题,但我不知道为什么它会在我的实体上这样做。用简单的英语表示如下。三个实体:账户、现场和合同。一个帐户可以有多个站点。一个帐户可以有多个合同。一个站点可以有多个合同。因此,在某些情况下,您可以将合同附加到站点,然后将其附加到帐户,或者将合同直接附加到帐户。 我假设我得到了这一点,因为删除合同有两种可能的级联,一种是在删除帐户时级联,另一种是直接附加到帐户,另一种是在删除