2011-12-26 29 views
5

Tengo dos tablas Employee (n) y Store (1), que tienen una relación n: 1.Entity Framework la instrucción delete está en conflicto con la restricción de referencia

Employee tiene la clave externa idStore que es la clave principal de Store.

Aquí es cómo tratar de eliminar una fila de 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; 
    } 
} 

Y aún así, me sale error que la instrucción de eliminación en conflicto con la restricción de referencia.

El error completo está aquí:

La instrucción DELETE en conflicto con la restricción REFERENCIA "FK_Bill_Employee". El conflicto se produjo en la base de datos "myDatabase", en la tabla "dbo.Bill", en la columna "idEmployeeMember".
La declaración ha finalizado.

Respuesta

1

¿No puede simplemente encontrar y eliminar al empleado?

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

No creo que hay que hacer nada más que esto, en realidad .....

La próxima vez cuando se carga esta tienda en particular el empleado pertenecía, ese empleado ya no será en la colección de empleados de la tienda, sin hacer ninguna supresión manual desordenada ni nada ...

+1

No, no puedo. Dice el mismo error. –

+0

Nada. Es una tabla simple cuya clave principal no es nula. Sin embargo, si intento eliminar al empleado con idStore = 1, entonces, si en la tabla Store solo hay una fila con idStore = 1, debería eliminarse. Creo que es por eso que este error está sucediendo. –

+0

{"La instrucción DELETE entró en conflicto con la restricción de REFERENCIA \" FK_Bill_Employee \ ". El conflicto ocurrió en la base de datos \" myDatabase \ ", table \" dbo.Bill \ ", column 'idEmployeeMember'. \ R \ nLa declaración ha sido terminado. "} –

Cuestiones relacionadas