2015-11-19 16 views
18

Nella RC1 di EntityFramework 7, rilasciata ieri, è stato aggiunto Elimina Cascade.EF7 RC1: disabilita Elimina Cascade

per disattivarlo per rapporto, posso usare:

 builder.Entity<Site>().HasOne(e => e.Person) 
     .WithMany(x => x.Sites).Metadata.DeleteBehavior = DeleteBehavior.Restrict; 

voglio disabilitarlo a livello globale per un DbContext, ma non ho trovato un modo. Come posso fare ?

+0

Sono morendo di sapere! – Chris

risposta

8

In questo momento le convenzioni non sono configurabili. L'attuale convenzione CascadeDelete si applica solo a required relationships. Relationships Conventions: Cascade Delete su efproject.net (documenti EF7 ufficiali) È possibile disabilitare esplicitamente la relazione richiesta se si comprendono bene le conseguenze.

 modelBuilder.Entity<Site>() 
      .HasOne(p => p.Person) 
      .WithMany(b => b.Sites) 
      .IsRequired(false); 

In caso contrario (e consigliato), è necessario impostare il comportamento On Delete esplicitamente (come già scoperto).

 modelBuilder.Entity<Site>() 
      .HasOne(p => p.Person) 
      .WithMany(b => b.Sites) 
      .OnDelete(DeleteBehavior.Restrict); 
18

Qualcuno ha dichiarato sul forum del progetto github che l'unico modo per farlo in questo momento è per scorrere tutte le relazioni nel metodo OnModelCreating(ModelBuilder builder), e impostare la DeleteBehavior proprietà DeleteBehavior.Restrict:

 foreach (var relationship in builder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys())) 
     { 
      relationship.DeleteBehavior = DeleteBehavior.Restrict; 
     } 
+1

Is .OnDelete (DeleteBehavior.Restrict) corrisponde a EF6 WillCascadeOnDelete (False)? Chiedo perché ho avuto il DeleteBehavior.Restrict su alcuni dei miei modelli ancora quando ho generato DB Schema in SQL Server, ho visto che in Sql gli schemi avevano: ON DELETE CASCADE -> che dice di cascata – Reza