引入多个外键 引发错误 实体框架 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和实体框架的新手,所以不知道发生了什么。谁能在这里伸出援手?
应指定在删除实体时,不应级联删除。也许是这样的:
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 命令将被拒绝,并且您必须先删除依赖项。