EF:由于外键约束,删除记录失败
本文关键字:删除 记录 失败 约束 于外键 EF | 更新日期: 2023-09-27 18:29:04
我的表上有insteadOfDelete
触发器。在InsteadOfDelete
触发器中考虑了外键约束。由于存在InsteadOfDelete
触发器,因此Cascade Delete
被移除。
这意味着EF不知道我正在处理实体框架范围之外的外键约束。每当我试图从主键被其他表引用的表中删除一行时,我都会收到一个错误,说是foreign key property is non-nullable
之一。
有没有一种方法可以通过LINQ
删除记录,而不会遇到外键约束的问题?
请注意:InsteadOfDelete
用于解决多级联路径问题。点击此处了解更多信息。
在实体框架中,您可以将外键设置为Allow Null
,当您想要删除行时,您应该将行的外键设置为null
。考虑以下模型:
public class Project
{
public int ProjectId {get; set;}
public Employee Employee {get;set;}
}
public class Employee
{
public int EmployeeId {get; set;}
public string EmployeeName {get;set;}
}
对于使用foreign key
删除行,您可以:1:
context.Entry(Project).Reference(r => r.Employee).CurrentValue = null;
2:
public void RemoveEmployeeFromProject(int projectId)
{
var project = Context.Projects.FirstOrDefault(x => x.ProjectId == projectId);
project.EmployeeId = (int?)null;
Context.SaveChanges();
}