引入多个外键抛出错误 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 命令将被拒绝,您必须先删除依赖项。
我的模型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 命令将被拒绝,您必须先删除依赖项。