引入多个外键 引发错误 实体框架 6.

本文关键字:错误 实体 框架 | 更新日期: 2023-09-27 18:37:23

我的模型类是这样的

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());
    }  
}

这会引发这样的错误

引入外键约束 'FK_dbo.ProcedurePrice_dbo。InsuranceProvider_InsuranceProviderID' 开启 表"程序价格"可能会导致周期或多个级联路径。 指定"删除时不执行任何操作"或"更新时无操作",或修改其他 外键约束。

我是MVC和实体框架的新手,所以不知道发生了什么。谁能在这里伸出援手?

引入多个外键 引发错误 实体框架 6.

应指定在删除实体时,不应级联删除。也许是这样的:

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时,这意味着删除主体行时,还应删除所有从属行。有时,依赖行也可能是其他外键中的主体,这意味着当它们被删除时,它们的所有依赖行为也会被删除。这就是错误消息中"可能导致周期或多个级联路径"的含义。

上面将告诉 EF,删除主体行时,不应删除其依赖项。相反,如果主体行具有依赖项,则 DELETE 命令将被拒绝,并且您必须先删除依赖项。