14

Diciamo che ho queste due entità molto semplici:EF4.1 Codice Primo: Come disattivare cascata eliminazione per un rapporto senza proprietà di navigazione in entità dipende

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] 
} 

Per alcune ragioni, io non voglio che il ChildEntity per mantenere un riferimento al suo genitore. Voglio solo che mantenga l'id ParentEntity ma niente di più. Fino ad ora, nessun problema, ho appena eliminato la riga [NOTWANTED] e tutto funziona come previsto.

Il mio problema qui è: come disabilitare l'eliminazione a cascata in quel caso specifico?

Se avevo ancora la proprietà di navigazione genitore che sarebbe stato così facile come:

modelBuilder.Entity<ChildEntity>() 
    .HasRequired(c => c.parent) 
    .WithMany(p => p.Childrens) 
    .WillCascadeOndelete(false) 

Tuttavia senza la proprietà di navigazione non ho idea di come posso raggiungere per disabilitare la cascata sulla cancellazione (senza disattivarlo a livello globale naturalmente, né per tabella, ma solo per la relazione).

Quello che ho fatto in questo momento è quello di impostare la chiave esterna come un int nullable, al fine di disattivare la cascata sulla eliminazione, ma non è abbastanza:

public int? ParentEntityId; // Foreign Key - nullable just to disable cascade on delete 

Come posso farlo funzionare con API fluente? Pensa dovrebbe essere possibile.

+0

è necessario .hasOne (ParentEntity) – Saeid

risposta

17

È necessario configurarlo dall'altra parte dell'associazione:

modelBuilder.Entity<ParentEntity>() 
    .HasMany(p => p.Children) 
    .WithRequired() 
    .HasForeignKey(c => c.ParentEntityId) 
    .WillCascadeOnDelete(false); 
+1

Woooo! Questo è bello, grazie mille :) – darkey

+0

Ho dovuto cambiare .ConRequired() a .WithRequired (c => c.ParentEntity) – Mason240

+0

Se si dispone di una proprietà di navigazione dal figlio al genitore, è possibile configurare la cascata in la mappatura del bambino. –

Problemi correlati