在简单模型(MVC ASP.NET)中找不到周期异常的原因
本文关键字:周期 找不到 异常 模型 简单 MVC NET ASP | 更新日期: 2023-09-27 18:22:06
我得到了一个模型,其中有Business、Workers和Jobs,还有Worker的特定Job中的业务的WorkerReports。
public class Business
{
public int BusinessId { get; set; }
public List<Job> jobs{ get; set; }
public List<Worker> workers { get; set; }
}
public class Worker
{
public int WorkerId{ get; set; }
public string Name{ get; set; }
public int BusinessId{ get; set; }
}
public class Inspector
{
public int InspectorId { get; set; }
public String Name{ get; set; }
}
public class Job
{
public int JobId { get; set; }
public string NameOfJob{ get; set; }
public int BusinessId { get; set; }
}
public class WorkerReport
{
public int WorkerReportId { get; set; }
public int InspectorId { get; set; }
public int JobId { get; set; }
public int WorkerId { get; set; }
public Job job{ get; set; }
public Worker worker{ get; set; }
public Inspector Inspector { get; set; }
}
但当模型生成时,我出现了以下错误:"WorkerReports"表上的"FK_dbo.WorkerReports_dbo.Workers_WorkerId"可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束
我不明白为什么会出现这个错误,因为我不知道循环是在哪里产生的。有人知道吗?圆圈是在哪里产生的?非常感谢,为一位出色的程序员提供帮助。
WorkerReport
上有两个删除级联路径。
- 业务->员工->员工报告
- 业务->工作->工作报告
默认情况下,所有关系都是必需的,并且约定启用从OneToManyCascadeDeleteConvention
的所有删除级联。解决方案是从Worker
或Job
手动移除级联中的至少一个。
modelBuilder.Entity<WorkerReport>()
.HasRequired(x => x.job) // HasOptional for nullable FK
.WithMany()
.WillCascadeOnDelete(false);
// modelBuilder.Entity<WorkerReport>()
// .HasRequired(x => x.worker) // HasOptional for nullable FK
// .WithMany()
// .WillCascadeOnDelete(false);
或者通过删除默认的删除级联约定来禁用所有删除级联。
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
把它放在DbContext
类中。
public class MyContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// here
}
}