我有两个表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;
}
}
然而,我得到的错误是delete语句与引用约束冲突。
完整的错误在这里:
DELETE语句与REFERENCE约束冲突 “FK_Bill_Employee”。冲突发生在数据库中 “myDatabase”,表“dbo.Bill”,列“idEmployeeMember”。
声明已经终止。
答案 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();
}
}
}
我认为你不需要做更多的事情,真的......
下次当您加载该员工所属的特定商店时,该员工将不再在该商店的员工集合中 - 不做任何杂乱的手动删除或任何事情....