引入多个外键抛出错误 Entity Framework 6

Introducing multiple foreign keys Throws error Entity Framework 6

我的模型class是这样的

public class ProcedurePrice
{
    public int ProcedurePriceID { get; set; }

    public int DepartmentID { get; set; }
    public int ProcedureID { get; set; }
    public int InsuranceProviderID { get; set; }
    public int ProcedureCategoryID { get; set; }
    public int ProcedureSubCategoryID { get; set; }
    public virtual Department Department { get; set; }
    public virtual InsuranceProvider InsuranceProvider { get; set; }
    public virtual ProcedureCategory ProcedureCategory { get; set; }
    public virtual ProcedureSubCategory ProcedureSubCategory { get; set; }
    public virtual Procedure Procedure { get; set; }
}

参考模型,

public class Department
{
    public int DepartmentID { get; set; }
    public string Name { get; set; }
}

等等.... 控制器

public class ProcedurePriceController : Controller
{
    private readonly DiagnosisContext db = new DiagnosisContext();

    // GET: /ProcedurePrice/
    public ActionResult Index()
    {
        IQueryable<ProcedurePrice> procedureprices =
        db.ProcedurePrices.Include(p => p.Department)
            .Include(p => p.InsuranceProvider)
            .Include(p => p.Procedure)
            .Include(p => p.ProcedureCategory)
            .Include(p => p.ProcedureSubCategory);
        return View(procedureprices.ToList());
    }  
}

这会抛出这样的错误

Introducing FOREIGN KEY constraint 'FK_dbo.ProcedurePrice_dbo.InsuranceProvider_InsuranceProviderID' on table 'ProcedurePrice' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

我是 MVC 和 Entity Framework 的新手,所以不知道发生了什么。有人可以在这里帮忙吗?

您应该指定当您的实体被删除时,它们不应级联删除。也许是这样的:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<ProcedurePrice>()
        .HasRequired(x => x.InsuranceProvider).WithMany()
        .WillCascadeOnDelete(false); // this is what you need
}

当您在SQL 中为外键指定ON DELETE CASCADE 时,这意味着当主行被删除时,所有从属行也应该被删除。有时依赖行也可能是其他外键中的主体,这意味着当它们被删除时,它们的所有依赖行也会被删除。这就是错误消息 "may cause cycles or multiple cascade paths".

的含义

上面的内容将告诉 EF,删除主行时,不应删除其从属行。相反,如果主行有依赖项,DELETE 命令将被拒绝,您必须先删除依赖项。