c# - Código EF4.1 primero: cómo deshabilitar la eliminación en cascada para una relación sin propiedades de navegación en la entidad dependiente
entity-framework ef-code-first (1)
Digamos que tengo estas dos entidades muy básicas:
public class ParentEntity
{
public int Id;
public virtual ICollection<ChildEntity> Childrens;
}
public class ChildEntity
{
public int Id;
public int ParentEntityId; // Foreign Key
public virtual ParentEntity parent; // [NOTWANTED]
}
Por algunas razones, no quiero que ChildEntity retenga una referencia a su padre. Solo quiero que mantenga la ID de ParentEntity pero nada más. Hasta ahora, no hay problema, simplemente borro la línea [NOTWANTED], y todo funciona como se esperaba.
Mi problema aquí es: ¿cómo deshabilitar la eliminación en cascada en ese caso específico?
Si todavía tuviera la propiedad de navegación principal, sería tan fácil como:
modelBuilder.Entity<ChildEntity>()
.HasRequired(c => c.parent)
.WithMany(p => p.Childrens)
.WillCascadeOndelete(false)
Sin embargo, sin la propiedad de navegación no tengo idea de cómo puedo lograr deshabilitar la cascada al eliminarla (sin deshabilitarla globalmente, por supuesto, ni por tabla, sino solo por la relación).
Lo que he hecho ahora es establecer la clave foránea como un int. Que puede contener nulos, para deshabilitar la cascada al eliminar, pero eso no es bonito:
public int? ParentEntityId; // Foreign Key - nullable just to disable cascade on delete
¿Cómo puedo hacer que funcione con API fluida? Piensa que debería ser posible.
Debes configurarlo desde el otro lado de la asociación:
modelBuilder.Entity<ParentEntity>()
.HasMany(p => p.Children)
.WithRequired()
.HasForeignKey(c => c.ParentEntityId)
.WillCascadeOnDelete(false);