我很难获得Code First模型的这一点来生成数据库。
这里是有问题的两个模型:
public class Workflow : BaseEntity, IBaseEntity
{
public string Name { get; set; }
public string Description { get; set; }
public bool Published { get; set; }
public DateTime? PublishedOn { get; set; }
public int Revision { get; set; } = 0;
public Guid PermanentId { get; set; }
public virtual ICollection<WorkflowStage> WorkflowStages { get; set; }
public virtual ICollection<WorkflowDataFactor> WorkflowDataFactors { get; set; }
public virtual ICollection<WorkflowInstance> WorkflowInstances { get; set; }
}
这是第二个模型:
public class WorkflowStage : BaseEntity, IBaseEntity
{
public int WorkflowId { get; set; }
public virtual Workflow Workflow { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Color { get; set; }
public int Order { get; set; }
public int Revision { get; set; } = 0;
public Guid PermanentId { get; set; }
public virtual ICollection<WorkflowStageStep> WorkflowStageSteps { get; set; }
public virtual ICollection<WorkflowStageInstance> WorkflowStageInstances { get; set; }
}
BaseEntity
为我所有其他实体提供Id
属性,这是主键。
出现此错误后:
介绍FOREIGN KEY约束 桌上的'FK_dbo.WorkflowStage_dbo.Workflow_WorkflowId' “ WorkflowStage”可能会导致循环或多个级联路径。指定开启 删除无操作或按更新无操作,或修改其他外键 约束。无法创建约束或索引。见前 错误。
我在上下文类中实现了这一点
modelBuilder.Entity<Workflow>().HasMany(x => x.WorkflowStages).WithRequired().WillCascadeOnDelete(false);
如果我理解正确,那就是说如果删除WorkflowStage
,则不应删除关联的Workflow
。
不是EF6根据顶部的错误寻找什么吗?
谢谢。
答案 0 :(得分:0)
将上下文类中的代码更改为:
modelBuilder.Entity<Workflow>()
.HasOptional<WorkflowStages>(s => s.WorkflowStages)
.WithMany()
.WillCascadeOnDelete(false);
答案 1 :(得分:0)
“在表'WorkflowStage'上引入FOREIGN KEY约束'FK_dbo.WorkflowStage_dbo.Workflow_WorkflowId'可能会导致循环或多个级联路径...”
这可能意味着您有多个表导致另一个表,并且每个表都有OnCascade设置。您无法在SQL Server中执行此操作。
Table1 ==>具有级联的Table2 Table3 ==> Table2 with Cascade <<-不,不,不!
那么多少个表与WorkFlowStage交互?有多个表可以级联吗?通过从一个表或另一个表中删除级联,是否有可能结束孤立记录?例如,如果您从WorkFlow中删除级联删除,那么是否可以使用不属于任何内容的WorkFlowStage?也许从其他涉及的表中删除级联会更合适。 在某些情况下,我在表上创建了AFTER DELETE触发器,该触发器可用于清理无约束的子记录。 HTH, 迈克