6

Vor EF7 verwendete ich den snipet unter Konventionen zu entfernen:Wie konfigurieren wir Konventionen für Entity Framework 7?

protected override void OnModelCreating(DbModelBuilder builder) 
{ 
     builder.Conventions.Remove<NavigationPropertyNameForeignKeyDiscoveryConvention>(); 
     builder.Conventions.Remove<PrimaryKeyNameForeignKeyDiscoveryConvention>(); 
     builder.Conventions.Remove<PluralizingTableNameConvention>(); 
     builder.Conventions.Remove<PrimaryKeyNameForeignKeyDiscoveryConvention>(); 
     builder.Conventions.Remove<TypeNameForeignKeyDiscoveryConvention>(); 
} 

Wie können wir das gleiche Ergebnis auf Entity Framework 7 erreichen?

Antwort

5

Die API für Konventionen ist derzeit nicht stabil. Siehe https://github.com/aspnet/EntityFramework/issues/2589.

Es kann getan werden, aber es erfordert die Verwendung von Abhängigkeitsinjektion, um die interne Funktionsweise von OnModelCreating in Ihrem Kontext zu überschreiben. DbContext verwendet die Abhängigkeitsinjektion, um eine Instanz von ModelSource zu finden, die den Modellgenerator (und die Konventionen) bereitstellt.

das Modell Quelle außer Kraft zu setzen, eine eigene Implementierung in Dependency Injection hinzufügen:

var serviceCollection = new ServiceCollection(); 
    serviceCollection 
     .AddEntityFramework() 
     .AddSqlServer(); 
    serviceCollection.AddSingleton<SqlServerModelSource, MyModelSource>(); 
    var serviceProvider = serviceCollection.BuildServiceProvider(); 

    using(var context = new MyContext(serviceProvider)) 
    { 
     // ... 
    } 

Ihre Implementierung von MyModelSourceModelSource.CreateConventionSet() außer Kraft setzen sollte. Siehe original source here

+0

Gut! Vielen Dank! – Minduca