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

时间:2016-01-06 07:52:18

标签: c# .net sql-server entity-framework linq

我的桌子上有insteadOfDelete个触发器。外键约束在InsteadOfDelete触发器中处理。由于存在InsteadOfDelete触发器,因此会删除Cascade Delete

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

有没有办法通过LINQ删除记录而不会遇到外键约束问题?

请注意:InsteadOfDelete用于解决多个级联路径问题。更多here

1 个答案:

答案 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();
}