我的模型类就像这样
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());
}
}
这会抛出这样的错误
介绍FOREIGN KEY约束'FK_dbo.ProcedurePrice_dbo.InsuranceProvider_InsuranceProviderID' 表'ProcedurePrice'可能会导致循环或多个级联路径。 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他 FOREIGN KEY约束。
我是MVC和实体框架的新手,所以不知道发生了什么。有人可以帮忙吗?
答案 0 :(得分:1)
您应该指定在删除实体时,不应该级联删除。也许是这样的:
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
时,表示删除主体行时,也应删除所有相关行。有时,依赖行也可能是其他外键中的主体,这意味着当它们被删除时,它们的所有依赖项也会被删除。这就是错误消息的含义&#34;可能导致循环或多个级联路径&#34;。
以上将告诉EF,当删除主要行时,不应删除其依赖项。相反,如果主要行具有依赖项,则DELETE命令将被拒绝,您必须首先删除依赖项。