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

pet*_*ski 5 entity-framework

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

Employee有外键idStore是主键Store.

以下是我尝试从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;
   }
}
Run Code Online (Sandbox Code Playgroud)

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

完整的错误在这里:

DELETE语句与REFERENCE约束"FK_Bill_Employee"冲突.冲突发生在数据库"myDatabase",表"dbo.Bill",列"idEmployeeMember"中.
该语句已终止.

mar*_*c_s 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();
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

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

下次当您加载该员工所属的这个特定商店时,该员工将不再位于该商店的员工集合中 - 无需进行任何混乱的手动删除或任何操作......

  • @Srcee:**阅读错误消息!!** 显然,**BILL** 和 **EMPLOYEE** 之间必须存在您没有在任何地方提到的引用,这才是导致问题的原因!从该消息中可以清楚地看出,问题**不是**在“Employee”和“Store”之间 - 但有一个表“Bill”,其列“idEmployeeMember”仍然引用您要删除的员工。 ...... (5认同)