实体框架delete语句与引用约束冲突

时间:2011-12-26 16:28:19

标签: entity-framework

我有两个表Employee(n)和Store(1),它们有n:1的关系。

Employee的外键idStoreStore的主键。

以下是我尝试从Employee删除行的方法:

public void deleteEmployee(int idEmployee)
{
   MyEntities pe = new MyEntities();
   try
   {
      var firstQuery = from e in pe.Employees
                       where e.idEmployee == idEmployee
                       select e;
      string findIdStore = firstQuery.First().StoreReference.EntityKey.EntityKeyValues[0].Value.ToString();
      int idStore = Int32.Parse(findIdStore);
      Store r = pe.Stores.First(c => c.idStore == idStore);
      r.Employees.Remove(firstQuery.First());
      pe.DeleteObject(firstQuery.First());
      pe.SaveChanges();
   }
   catch (Exception ex)
   {
      return;
   }
}

然而,我得到的错误是delete语句与引用约束冲突。

完整的错误在这里:

  

DELETE语句与REFERENCE约束冲突   “FK_Bill_Employee”。冲突发生在数据库中   “myDatabase”,表“dbo.Bill”,列“idEmployeeMember”。
  声明已经终止。

1 个答案:

答案 0 :(得分:1)

你不能找到并删除员工吗?

public void deleteEmployee(int idEmployee)
{
   using(MyEntities pe = new MyEntities())
   {
      var emmployeeToDelete = pe.Employees.FirstOrDefault(e => e.idEmployee == idEmployee);

      if(employeeToDelete != null)
      {
          pe.DeleteObject(employeeToDelete);
          pe.SaveChanges();
      }
   }
}

我认为你不需要做更多的事情,真的......

下次当您加载该员工所属的特定商店时,该员工将不再在该商店的员工集合中 - 不做任何杂乱的手动删除或任何事情....