Come configuriamo le convenzioni su Entity Framework 7?

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

Domanda

Prima di EF7 ho usato lo snipet qui sotto per rimuovere le convenzioni:

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

Come otteniamo lo stesso risultato su Entity Framework 7?

Risposta accettata

L'API per le convenzioni non è attualmente stabile. Vedi https://github.com/aspnet/EntityFramework/issues/2589 .

Può essere fatto, ma è necessario utilizzare l'iniezione delle dipendenze per sovrascrivere il funzionamento interno di come OnModelCreating viene richiamato nel contesto. DbContext utilizza l'iniezione delle dipendenze per trovare un'istanza di ModelSource che fornisce il generatore di modelli (e le convenzioni).

Per sovrascrivere l'origine del modello, aggiungi la tua implementazione nell'integrazione delle dipendenze:

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

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

L'implementazione di MyModelSource deve sostituire ModelSource.CreateConventionSet() . Vedi la fonte originale qui



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché