2011-03-20 13 views
14

Al realizar una eliminación de una relación uno-muchos sin exponer la clave externa, EF elimina el registro principal e intenta anular la clave externa en los registros secundarios. Por supuesto, esto causa un error porque la clave externa no puede contener nulos. Agregar la clave foránea a la clase secundaria anula este comportamiento, pero prefiero no exponerlo.Habilitar eliminaciones en cascada en el código EF Primero sin exponer la clave externa

Por ejemplo, dadas las dos clases siguientes, preferiría no tener JobId como propiedad de la clase Project.

public class Job : ModelBase 
{ 
    [Required] 
    [StringLength(100)] 
    public string Company { get; set; } 

    [Required] 
    [StringLength(100)] 
    public string JobTitle { get; set; } 

    public ICollection<Project> Projects { get; set; } 
} 

public class Project : ModelBase 
{ 
    [Required] 
    [StringLength(100)] 
    public string Name { get; set; } 

    [Required] 
    public string Summary { get; set; } 

    public int JobId { get; set; } 
} 

¿Hay una manera de permitir eliminaciones en cascada en el Código de EF En primer lugar, sin exponer la clave externa en el lado muchos de la relación?

Respuesta

14

Yup! Retire jobid y añadir lo siguiente:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Job>().HasMany(j => j.Projects).WithRequired(); 
    } 

En la base de datos, esto añadirá una eliminación en cascada en la relación PK/FK.

(supongo que su ModelBase tiene un número entero Id =)

+0

Perfecto. ¡Gracias! –

+0

No es lo que llamaría obvio ... –

Cuestiones relacionadas