如何启用级联删除

时间:2016-12-21 19:58:27

标签: c# sql asp.net-mvc entity-framework

我有两张桌子员工和学位。在这两个表之间存在一对多的关系。 (员工可以有多个学位)当我删除员工时,我也要删除该员工的所有学位。我在其他帖子中发现我可以使用级联删除。试图添加级联删除,但我尝试删除员工时收到错误。我尝试了以下方法:

我的两张桌子:

public partial class Degree
{
    public int DegreeId { get; set; }
    public string Course { get; set; }
    public string Level { get; set; }
    public string School { get; set; }
    public int Employee_BSN { get; set; }

    public virtual Employee Employee { get; set; }
}

public partial class Employee
{
    public Employee()
    {
        this.Degrees = new HashSet<Degree>();
    }

    public int BSN { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }    
    public virtual ICollection<Degree> Degrees { get; set; }
}

阅读几篇文章后,我发现了这一点。但这并没有解决我的问题。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Degree>()
            .HasRequired(t=>t.Employee)
            .WithMany(t=>t.Degrees)
            .HasForeignKey(d=>d.Employee_BSN)
            .WillCascadeOnDelete(true);
        base.OnModelCreating(modelBuilder);
    }

在我的员工控制器中,我有以下删除方法

    // GET: Employees/Delete/5
    public ActionResult Delete(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Employee employee = db.Employees.Find(id);
        if (employee == null)
        {
            return HttpNotFound();
        }
        return View(employee);
    }

    // POST: Employees/Delete/5
    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int id)
    {
        Employee employee = db.Employees.Find(id);
        db.Employees.Remove(employee);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

错误

  

DELETE语句与REFERENCE约束“FK_Degree_Employee”冲突。冲突发生在数据库“\ APP_DATA \ DATABASE.MDF”,表“dbo.Degree”,列“Employee_BSN”中。   声明已经终止。

1 个答案:

答案 0 :(得分:1)

格特是对的,很可能你还没有配置级联删除。

问题在于,当您删除员工时,Entity Framework会尝试将所有关联度数的员工外键设置为null。 这可能是您的数据库设计所允许的 - 员工外键不能为空。

因此,您必须为学位表中的员工FK启用级联删除。

关于如何做到这一点,这是一个很好的答案:https://stackoverflow.com/a/35886878/4227836

相关问题