6

EF7 J'ai utilisé le snipet ci-dessous pour éliminer les conventions:Comment pouvons-nous configurer des conventions sur Entity Framework 7? Avant

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>(); 
} 

Comment pouvons-nous obtenir le même résultat sur Entity Framework 7?

Répondre

5

L'API pour les conventions n'est actuellement pas stable. Voir https://github.com/aspnet/EntityFramework/issues/2589.

Cela peut être fait, mais cela nécessite d'utiliser l'injection de dépendance pour remplacer le fonctionnement interne de la façon dont OnModelCreating est appelée dans votre contexte. DbContext utilise l'injection de dépendance pour trouver une instance de ModelSource qui fournit le générateur de modèle (et les conventions).

Pour remplacer la source du modèle, ajoutez votre propre implémentation dans l'injection de dépendance:

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

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

Votre mise en œuvre de MyModelSource devrait passer outre ModelSource.CreateConventionSet(). Voir le original source here

+0

Bon! Je vous remercie! – Minduca