2012-01-30 12 views
5

Estoy utilizando la base de datos de ejemplo Northwind. Tengo este código:Entity Framework Eliminaciones en cascada y carga lenta

var db = new NorthwindEntities(); 
int id = 2; // Example 
var delObject = (from o in db.Orders.Include("Order_Details") 
       where o.OrderID == id 
       select o).First(); 
db.Orders.DeleteObject(delObject); 
db.SaveChanges(); 
  • Tengo una (1-a-muchos) de asociación para que - Detalles de pedidos, con borrados en cascada. (Si elimino un pedido, se borrarán todos los detalles de pedido con el mismo ID de pedido).

  • Tengo LazyLoading habilitado.

Si elimino el .Include("Order_Details") en la cláusula from, la eliminación en cascada no va a funcionar.

¿Por qué sucede esto? ¿No se supone que la inicialización lenta me "incluye" en Order_Details y, finalmente, me permite eliminar en cascada?

+0

No. En mi experiencia, la eliminación en cascada solo se aplica a los objetos de memoria. – cadrell0

Respuesta

5

Las eliminaciones en cascada se definen en su modelo EF.

EF generará, por lo tanto, instrucciones de eliminación para los datos que ha cargado. EF no irá a la base de datos para verificar qué debe eliminar.

Puede definir eliminaciones en cascada (según su base de datos) en el nivel de la base de datos. En este caso, EF eliminará el nodo superior y la base de datos eliminará las filas relacionadas.

1

¿Tiene la eliminación en cascada definida tanto en la base de datos como en la configuración de la entidad? He visto que tenerlo definido en una sola y no en la otra puede causar este problema.

+0

De hecho, eso lo hizo funcionar, pero ¿por qué sucede esto? – ColdFusion

1

Eliminaciones en cascada en el modelo EF elimina solo los detalles que se han cargado en el contexto. En caso de que si usa Include Order_Details, se cargue durante la consulta junto con Orders. Si activó LazyLoading y no utiliza Incluir, entonces se cargan según sea necesario, es decir, cuando hace referencia a las propiedades de navegación. Por lo tanto, si no le importan los detalles y acepta que se borrarán en silencio con el registro maestro, debe definir la eliminación en cascada tanto en el modelo EF como en el esquema DB.

Cuestiones relacionadas