2012-05-03 6 views
15

Attualmente sto utilizzando EF Code First 4.3 con le migrazioni abilitate, ma le migrazioni automatiche sono disabilitate.Annotazioni dei dati del framework di entità equivalenti a .WillCascadeOnDelete (false);

mia domanda è semplice, c'è un annotazioni di dati equivalente del .WillCascadeOnDelete configurazione del modello (false)

Vorrei decorare la mia classe in modo che le relazioni di chiave esterna non attivano una cascata eliminare.

codice di esempio:

public class Container 
{ 
    public int ContainerID { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Output> Outputs { get; set; } 
} 

public class Output 
{ 
    public int ContainerID { get; set; } 
    public virtual Container Container { get; set; } 

    public int OutputTypeID { get; set; } 
    public virtual OutputType OutputType { get; set; } 

    public int Quantity { get; set; } 
} 

public class OutputType 
{ 
    public int OutputTypeID { get; set; } 
    public string Name { get; set; } 
} 

mi piacerebbe fare qualcosa di simile:

public class Output 
{ 
    [CascadeOnDelete(false)] 
    public int ContainerID { get; set; } 
    public virtual Container Container { get; set; } 

    [CascadeOnDelete(false)]  
    public int OutputTypeID { get; set; } 
    public virtual OutputType OutputType { get; set; } 

    public int Quantity { get; set; } 
} 

In questo modo sarei in grado di patibolo correttamente la migrazione. quale impalcatura le relazioni di chiave esterna da eliminare in cascata al momento.

Qualche idea, oltre all'uso della configurazione del modello?

+0

hanno la stessa domanda. Trovato come abilitarlo [qui] (http://stackoverflow.com/a/33276901/4625305), ma quello che voglio è disattivarlo solo per una relazione. – AXMIM

risposta

19

No non esiste un equivalente. È necessario utilizzare API fluente per rimuovere selettivamente l'eliminazione a cascata o rimuovere la convenzione OneToManyCascadeDelete per rimuoverla globalmente.

+0

rimuoverà la convenzione OneToManyCascadeDelete, rimuoverà la convenzione anche se aggiungi annotazioni come [Richiesto] a una chiave esterna? – FRoZeN

+0

L'eliminazione in cascata deve essere utilizzata solo per le relazioni richieste e la rimozione di questa convenzione lo interromperà. Opzionali sono semplicemente impostati su null. –

+0

In caso di utilizzo di OneToManyCascadeDelete = false, in che modo abilitare l'eliminazione a cascata in modo selettivo con annotazioni di dati? – ironic

2

creare una classe di mappatura (la sintassi fluente) e utilizzare il codice qui sotto:

// add relationships "Post" and "User" to a "Comment" entity 
this.HasRequired(t => t.Post) 
    .WithMany(t => t.Comments) 
    .HasForeignKey(d => d.PostID) 
    .WillCascadeOnDelete(false); // <--- 

this.HasOptional(t => t.User) 
    .WithMany(t => t.Comments) 
    .HasForeignKey(d => d.UserID) 
    .WillCascadeOnDelete(false); // <--- 

Ecco un nice post su come impostare le mappature fluente, se avete bisogno di più informazioni.

+0

Il collegamento è rotto. – AXMIM

0

Basta fare la proprietà nullable FK può impedire a cascata eliminare accada:

public int? OutputTypeID { get; set; }