EF:由于外键约束,删除记录失败

本文关键字:删除 记录 失败 约束 于外键 EF | 更新日期: 2023-09-27 18:29:04

我的表上有insteadOfDelete触发器。在InsteadOfDelete触发器中考虑了外键约束。由于存在InsteadOfDelete触发器,因此Cascade Delete被移除。

这意味着EF不知道我正在处理实体框架范围之外的外键约束。每当我试图从主键被其他表引用的表中删除一行时,我都会收到一个错误,说是foreign key property is non-nullable之一。

有没有一种方法可以通过LINQ删除记录,而不会遇到外键约束的问题?

请注意:InsteadOfDelete用于解决多级联路径问题。点击此处了解更多信息。

EF:由于外键约束,删除记录失败

在实体框架中,您可以将外键设置为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();
}