Comment configurons-nous les conventions sur Entity Framework 7?

ef-code-first entity-framework entity-framework-core

Question

Avant EF7, j’utilisais le snipet ci-dessous pour supprimer les conventions:

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éponse acceptée

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

Cela peut être fait, mais cela nécessite l'utilisation d'une injection de dépendance pour remplacer le fonctionnement interne de la façon dont OnModelCreating est appelé dans votre contexte. DbContext utilise l'injection de dépendance pour trouver une instance de ModelSource qui fournit le constructeur 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 implémentation de MyModelSource doit remplacer ModelSource.CreateConventionSet() . Voir la source originale ici



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi