2012-07-30 19 views
5

No puedo hacer que la eliminación en cascada funcione correctamente. Esta es mi tabla de clave foránea:Eliminar en cascada en una clave foránea en Code First

public class CoverageLevel 
{ 
    public int Id { get; set; } 
    public virtual MedicalPlan MedicalPlan { get; set; } //foreign key 
    public virtual VisionPlan VisionPlan { get; set; } //foreign key 
    public virtual DentalPlan DentalPlan { get; set; } //foreign key 
} 

Hay tres maneras diferentes en que probé. Cuando no uso ninguna API fluida, configura las tablas y las claves externas de forma apropiada, pero la eliminación en cascada no funciona. Cuando utilizo este código:

modelBuilder.Entity<MedicalPlan>().HasMany(t => t.CoverageLevels).WithOptional.WillCascadeOnDelete(); 

se crea una segunda columna, así que tengo una forma completamente nula MedicalPlan_Id y luego un MedicalPlan_Id1 que llene. Cuando uso esto:

modelBuilder.Entity<MedicalPlan>().HasMany(t => t.CoverageLevels).WithOptional().HasForeignKey(d => d.MedicalPlan).WillCascadeOnDelete(); 

Me sale un error al crear la base de datos. ¿Cómo puedo configurar la eliminación de cascada correctamente?

Respuesta

4
modelBuilder.Entity<MedicalPlan>() 
    .HasMany(m => m.CoverageLevels) 
    .WithOptional(c => c.MedicalPlan) 
    .WillCascadeOnDelete(); 

... debe ser la asignación correcta. Si omite la expresión lambda en Withoptional(...), EF supone que MedicalPlan.CoverageLevels no tiene una propiedad de navegación inversa en la entidad CoverageLevel y que CoverageLevel.MedicalPlan pertenece a otra relación que es el motivo de la segunda clave externa.

Cuestiones relacionadas