我的桌子上有insteadOfDelete
个触发器。外键约束在InsteadOfDelete
触发器中处理。由于存在InsteadOfDelete
触发器,因此会删除Cascade Delete
。
这意味着EF不知道我在实体框架范围之外处理外键约束。每当我尝试从其他表引用主键的表中删除一行时,我会收到一条错误,指出foreign key property is non-nullable
之一。
有没有办法通过LINQ
删除记录而不会遇到外键约束问题?
请注意:InsteadOfDelete
用于解决多个级联路径问题。更多here。
答案 0 :(得分:0)
在Entity Frame工作中,您可以将外键设置为Allow Null
,当您想要删除行时,您应该设置Row的外键= 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();
}