entity-framework - tabla - mvc entity framework español
Eliminar un objeto y todas sus entidades relacionadas en Entity Framework (2)
¿Alguien sabe cómo eliminar un objeto y todas sus entidades relacionadas dentro de EF sin atravesar manualmente el gráfico del objeto y eliminar cada uno?
Por ejemplo, tengo SalesOrder y SalesOrderDetails con una relación 1: N entre ellos. Cuando elimino un SalesOrder, quiero que todos los SalesOrderDetails se eliminen automáticamente.
¿Es esto posible en EF?
en este artículo, Alex Jamese (quien publica su respuesta), tiene un artículo completo sobre el tema.
http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx
El EF es responsable de la corrección del ObjectContext después de SaveChanges (). Entonces, el EF intenta sincronizar el ObjectContext, con el estado esperado de la base de datos después de la cascada esperada en la base de datos. Un signo revelador de esto es que si abre algo como SqlProfiler, notará que EF emite solicitudes DELETE para entidades dependientes que conoce (es decir, que están cargadas en ObjectContext) cuando se elimina un principal. Esencialmente, lo que está sucediendo aquí es que Entity Framework espera que al eliminar el principal en la base de datos, se eliminen todos sus dependientes en la base de datos. Por lo tanto, emite, lo que debería ser, un DELETE redundante para solicitarse, de modo que los dependientes ya cargados se eliminen del ObjectContext. La clave a tener en cuenta es que EF no recupera todas las entidades dependientes y emite eliminaciones para ellas: solo borra dependientes que ya están en la memoria.
No deberías estar haciendo esto en el Entity Framework. Todas las bases de datos relacionales populares admiten ON CASCADE DELETE
en claves externas, que es mucho más eficiente también. Sugiero que solo vayas con eso.