在简单模型中找不到循环异常的原因(MVC ASP.NET)

时间:2014-09-15 17:18:47

标签: c# asp.net sql-server asp.net-mvc asp.net-mvc-4

我有一个模型,我有业务,工人和工作,还有一个工人的特定工作中的企业的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约束。

我不明白为什么我会收到这个错误,因为我看不到循环的产生位置。有人有点想法吗?圈子在哪里造成? 非常感谢,为一位沮丧的程序员提供帮助。

1 个答案:

答案 0 :(得分:1)

WorkerReport上有两个删除级联路径。

  • 商业 - &gt;工人 - &gt; WorkerReport
  • 商业 - &gt;工作 - &gt; WorkerReport

默认情况下,所有关系都是必需的,并且约定启用OneToManyCascadeDeleteConvention的所有删除级联。解决方案是从WorkerJob手动删除至少一个级联。

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
    }
}