Entity Framework 删除语句与引用约束冲突。

5

我有两个表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;
   }
}

仍然会出现错误,表示删除语句与引用约束冲突。

完整的错误信息如下:

删除语句与参照约束“FK_Bill_Employee”冲突,在数据库“myDatabase”的表“dbo.Bill”的列'idEmployeeMember'中发生冲突。
该语句已终止。

1个回答

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

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

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


仅仅是一个简单的表格,其主键不能为空。但是,如果我尝试删除idStore = 1的员工,那么如果在Store表中只有一行idStore = 1的记录,它也应该被删除。我认为这就是出现此错误的原因。 - petko_stankoski
"DELETE语句与参照约束"FK_Bill_Employee"冲突。冲突发生在数据库"myDatabase"的表"dbo.Bill"中的列'idEmployeeMember'。\r\n该语句已终止。" - petko_stankoski
5
@Srcee: 读错误信息! 很明显在你没有提到的 BILLEMPLOYEE 之间必须有一个引用,才会导致这个问题!从错误消息中可以清楚地看出,问题并不是在 EmployeeStore 之间 - 而是有一张名为 Bill 的表,其具有一个名为 idEmployeeMember 的列仍然参照了你正试图删除的员工。 - marc_s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接