entity-framework - first - entity framework ejemplo
El código del marco de entidad primero se elimina con cascada (2)
Tomado del código generado automáticamente VS2010:
Category category = db.Categories.Find(id);
db.Categories.Remove(category);
db.SaveChanges();
¿Cómo configuro mi dominio y la declaración LINQ para poder eliminar un registro de una base de datos?
public class Category {
public int CategoryId { get; set; }
public string Name { get; set; }
public List<Product> Products{ get; set; }
}
public class Product {
public int ProductId { get; set; }
public string Name { get; set; }
public int CategoryId {get; set; }
public Category Category{ get; set; }
}
Lo que me gustaría hacer es eliminar Categoría y poder conectar en cascada la eliminación a todos los productos secundarios.
- ¿Hay otros atributos adicionales necesarios en mi dominio?
- ¿Cuál es la declaración de LINQ para eliminar objetos sin hacer un viaje de ida y vuelta? (No quiero seleccionar, solo una eliminación directa).
¿Es esta la única manera de hacer esto?
Category category = new Category() { CategoryId = 1 } ;
context.AttachTo("Category", category);
context.DeleteObject(category);
context.Savechanges();
Usted mencionó primero el código EF que significa EF 4.1 pero ha mostrado un ejemplo de eliminación de objeto en EF 4. El enfoque correcto para eliminar el objeto en EF 4.1 sin cargarlo desde la base de datos es:
var category = new Category() { CategoryId = 1 };
context.Categories.Attach(category);
context.Categories.Remove(category);
context.SaveChanges();
Si no cambió nada en la configuración de las convenciones de defalut, también eliminará todos los productos relacionados porque OneToManyCascadeDeleteConventions
asegura que todas las relaciones de uno a muchos se crean con ON CASCADE DELETE
. No habrá viajes de ida y vuelta adicionales a la base de datos, solo una declaración DELETE
única para Category
con Id
= 1.
La situación diferente puede ocurrir si desea eliminar Category
completamente cargada (con propiedad de navegación de Products
cargados) en tal caso EF creará una declaración de eliminación separada para cada Product
modo que tendrá N + 1 viajes de ida y vuelta a la base de datos donde N es el número de productos en la categoría . Here es cómo funciona la eliminación de cascada en EF. Está relacionado con el diseñador de la entidad, pero los principios descritos son los mismos.