2017-10-19 4 views
4

mit EF 6.1+ gab es Zeiten, in denen wir bestehende Konnetionen hinzufügen oder entfernen müssen. Der Code sieht mehr oder weniger wie folgt aus:Wo sind Entity Framework Core Konventionen?

public class MyContext : DbContext 
    { 
      protected override void OnModelCreating(DbModelBuilder modelBuilder) 
      { 
       modelBuilder.Conventions.AddFromAssembly(Assembly.GetExecutingAssembly()); 
       modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
       modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 
       modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>(); 

       base.OnModelCreating(modelBuilder); 
      } 
} 

Wie funktioniert das Gleiche im EF-Kern? Modelbuilder hat keine Conventions-Eigenschaft :(

+0

* Wo sind Entity Framework-Kernübereinkommen * Irgendwo in der Zukunft (überprüfen EF Core-Roadmap und Backlog) zu tun?. –

Antwort

1

Sieht aus, als ob es immer noch nicht in EF Core 2.0 ist. Also hier ist eine Möglichkeit, es zu erreichen. Ich hatte dies zu konsistenten Verhalten auf bestimmte Attribute angewendet, aber um die Beispiele in Ihrer Frage zu adressieren versuchen könnte dies:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    // equivalent of modelBuilder.Conventions.AddFromAssembly(Assembly.GetExecutingAssembly()); 
    // look at this answer: https://stackoverflow.com/a/43075152/3419825 

    // for the other conventions, we do a metadata model loop 
    foreach (var entityType in modelBuilder.Model.GetEntityTypes()) 
    { 
     // equivalent of modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
     entityType.Relational().TableName = entityType.DisplayName(); 

     // equivalent of modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 
     // and modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>(); 
     entityType.GetForeignKeys() 
      .Where(fk => !fk.IsOwnership && fk.DeleteBehavior == DeleteBehavior.Cascade) 
      .ToList() 
      .ForEach(fk => fk.DeleteBehavior = DeleteBehavior.Restrict); 
    } 

    base.OnModelCreating(modelBuilder); 
} 

sollten Sie in der Lage sein, eine Menge Dinge mit entityType

Verwandte Themen