2011-03-20 10 views
14

Quando si esegue l'eliminazione di una relazione uno-molti senza esporre la chiave esterna, EF elimina il record padre e tenta di annullare la chiave esterna sui record figlio. Ciò ovviamente causa un errore perché la chiave esterna non è annullabile. L'aggiunta della chiave esterna alla classe figlio sovrascrive questo comportamento, ma preferirei non esporlo.Abilita eliminazioni a cascata in codice EF Prima senza esporre la chiave esterna

Ad esempio, date le seguenti due classi, preferirei non avere JobId come proprietà della classe 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; } 
} 

Esiste un modo per consentire a cascata cancella in EF primo codice senza esporre la chiave esterna sul lato molti della relazione?

risposta

14

Yup! Rimuovere JobId e aggiungere il seguente:

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

Nel database, questo aggiungerà una cascata eliminare nel rapporto PK/FK.

(Suppongo che ModelBase abbia un numero intero Id =)

+0

Perfetto. Grazie! –

+0

Non quello che chiamerei ovvio ... –

Problemi correlati