我有一个模型,我有业务,工人和工作,还有一个工人的特定工作中的企业的WorrkerReports。
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约束。
我不明白为什么我会收到这个错误,因为我看不到循环的产生位置。有人有点想法吗?圈子在哪里造成? 非常感谢,为一位沮丧的程序员提供帮助。
答案 0 :(得分:1)
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
}
}