Condividi tramite


Modifiche che influiscono sul provider

Questa pagina contiene collegamenti alle richieste pull effettuate nel repository EF Core che potrebbe richiedere agli autori di altri provider di database di reagire. L'intenzione è quella di fornire un punto di partenza per gli autori di provider di database di terze parti esistenti durante l'aggiornamento del provider a una nuova versione.

Il log verrà avviato con le modifiche da 2.1 a 2.2. Prima della versione 2.1 sono stati usati le providers-beware etichette e providers-fyi sui problemi e le richieste pull.

2.2 ---> 3.x

Si noti che molte delle modifiche che causano un'interruzione a livello di applicazione influisce anche sui provider.

  • https://github.com/dotnet/efcore/pull/14022
    • Rimosse le API obsolete e gli overload dei parametri facoltativi compressi
    • Rimosso DatabaseColumn.GetUnderlyingStoreType()
  • https://github.com/dotnet/efcore/pull/14589
    • Api obsolete rimosse
  • https://github.com/dotnet/efcore/pull/15044
    • Le sottoclassi di CharTypeMapping potrebbero essere state interrotte a causa di modifiche di comportamento necessarie per correggere un paio di bug nell'implementazione di base.
  • https://github.com/dotnet/efcore/pull/15090
    • Aggiunta di una classe di base per IDatabaseModelFactory e aggiornata per l'uso di un oggetto paramater per attenuare le interruzioni future.
  • https://github.com/dotnet/efcore/pull/15123
    • Oggetti parametro usati in MigrationsSqlGenerator per attenuare le interruzioni future.
  • https://github.com/dotnet/efcore/pull/14972
    • La configurazione esplicita dei livelli di log richiedeva alcune modifiche alle API che i provider potrebbero usare. In particolare, se i provider usano direttamente l'infrastruttura di registrazione, questa modifica potrebbe interrompere l'uso. Inoltre, i provider che usano l'infrastruttura (che sarà pubblica) dovranno derivare da LoggingDefinitions o RelationalLoggingDefinitions. Per esempi, vedere SQL Server e provider in memoria.
  • https://github.com/dotnet/efcore/pull/15091
    • Le stringhe di risorse core, relazionali e astrazioni sono ora pubbliche.
    • CoreLoggerExtensions e RelationalLoggerExtensions sono ora pubblici. I provider devono usare queste API quando si registrano eventi definiti a livello di base o relazionale. Non accedere direttamente alle risorse di registrazione; questi sono ancora interni.
    • IRawSqlCommandBuilder è stato modificato da un servizio singleton a un servizio con ambito
    • IMigrationsSqlGenerator è stato modificato da un servizio singleton a un servizio con ambito
  • https://github.com/dotnet/efcore/pull/14706
    • L'infrastruttura per la creazione di comandi relazionali è stata resa pubblica in modo che possa essere usata in modo sicuro dai provider e sottoposto a refactoring leggermente.
  • https://github.com/dotnet/efcore/pull/14733
    • ILazyLoader è passato da un servizio con ambito a un servizio temporaneo
  • https://github.com/dotnet/efcore/pull/14610
    • IUpdateSqlGenerator è passato da un servizio con ambito a un servizio singleton
    • Inoltre, ISingletonUpdateSqlGenerator è stato rimosso
  • https://github.com/dotnet/efcore/pull/15067
    • Un sacco di codice interno usato dai provider è stato reso pubblico
    • Non dovrebbe più essere necssary fare riferimento IndentedStringBuilder da quando è stato fattorizzato dai luoghi che lo hanno esposto
    • Gli utilizzi di NonCapturingLazyInitializer devono essere sostituiti con LazyInitializer da BCL
  • https://github.com/dotnet/efcore/pull/14608
    • Questa modifica è descritta completamente nel documento delle modifiche che causano un'interruzione dell'applicazione. Per i provider, questo può avere un impatto maggiore perché il test di EF Core può spesso causare il verificarsi di questo problema, quindi l'infrastruttura di test è stata modificata per rendere meno probabile tale problema.
  • https://github.com/dotnet/efcore/issues/13961
    • EntityMaterializerSource è stato semplificato
  • https://github.com/dotnet/efcore/pull/14895
    • StartsWith la traduzione è cambiata in modo che i provider vogliano/debbano reagire
  • https://github.com/dotnet/efcore/pull/15168
    • I servizi del set di convenzioni sono stati modificati. I provider devono ora ereditare da "ProviderConventionSet" o "RelationalConventionSet".
    • Le personalizzazioni possono essere aggiunte tramite IConventionSetCustomizer i servizi, ma è destinato a essere usato da altre estensioni, non da provider.
    • Le convenzioni usate in fase di esecuzione devono essere risolte da IConventionSetBuilder.
  • https://github.com/dotnet/efcore/pull/15288
    • Il seeding dei dati è stato refactoring in un'API pubblica per evitare la necessità di usare tipi interni. Questo dovrebbe influire solo sui provider non relazionali, poiché il seeding viene gestito dalla classe relazionale di base per tutti i provider relazionali.

2.1 ---> 2.2

Modifiche solo test

  • https://github.com/dotnet/efcore/pull/12057 - Consentire i delimetri SQL personalizzabili nei test
    • Testare le modifiche che consentono confronti a virgola mobile non rigorosi in BuiltInDataTypesTestBase
    • Modifiche di test che consentono di riesezionare i test di query con diversi parametri DI SQL
  • https://github.com/dotnet/efcore/pull/12072 - Aggiungere test DbFunction ai test delle specifiche relazionali
    • In modo che questi test possano essere eseguiti su tutti i provider di database
  • https://github.com/dotnet/efcore/pull/12362 - Pulizia dei test asincroni
    • Rimuovere Wait chiamate, asincrone non richieste e rinominare alcuni metodi di test
  • https://github.com/dotnet/efcore/pull/12666 - Unificare l'infrastruttura di test di registrazione
    • Aggiunta CreateListLoggerFactory e rimozione di un'infrastruttura di registrazione precedente, che richiederà ai provider di usare questi test per reagire
  • https://github.com/dotnet/efcore/pull/12500 - Eseguire più test di query in modo sincrono e asincrono
    • I nomi dei test e il factoring sono stati modificati, che richiederanno ai provider di usare questi test per reagire
  • https://github.com/dotnet/efcore/pull/12766 - Ridenominazione degli spostamenti nel modello ComplexNavigations
    • I provider che usano questi test potrebbero dover reagire
  • https://github.com/dotnet/efcore/pull/12141 - Restituire il contesto al pool invece di eliminare nei test funzionali
    • Questa modifica include alcuni refactoring di test che potrebbero richiedere ai provider di reagire

Modifiche al codice di test e prodotto

  • https://github.com/dotnet/efcore/pull/12109 - Consolidare i metodi RelationalTypeMapping.Clone
    • Le modifiche apportate nella versione 2.1 a RelationalTypeMapping sono consentite per una semplificazione nelle classi derivate. Non crediamo che ciò causasse un'interruzione per i provider, ma i provider possono sfruttare questa modifica nelle classi di mapping dei tipi derivati.
  • https://github.com/dotnet/efcore/pull/12069 - Query con tag o denominate
    • Aggiunge l'infrastruttura per l'assegnazione di tag alle query LINQ e la visualizzazione di tali tag come commenti in SQL. Ciò potrebbe richiedere ai provider di reagire nella generazione di SQL.
  • https://github.com/dotnet/efcore/pull/13115 - Supportare i dati spaziali tramite NTS
    • Consente di registrare mapping dei tipi e traduttori membri all'esterno del provider
      • I provider devono chiamare base. FindMapping() nell'implementazione di ITypeMappingSource per il funzionamento
    • Seguire questo modello per aggiungere il supporto spaziale al provider coerente tra provider.
  • https://github.com/dotnet/efcore/pull/13199 - Aggiungere il debug avanzato per la creazione del provider di servizi
    • Consente a DbContextOptionsExtensions di implementare una nuova interfaccia in grado di aiutare gli utenti a capire perché il provider di servizi interno viene ricreato
  • https://github.com/dotnet/efcore/pull/13289- Aggiunge l'API Can Connessione per l'uso da parte dei controlli di integrità
    • Questa richiesta pull aggiunge il concetto di che verrà usato da ASP.NET controlli di CanConnect integrità principali per determinare se il database è disponibile. Per impostazione predefinita, l'implementazione relazionale chiama Existsolo , ma i provider possono implementare qualcosa di diverso, se necessario. I provider non relazionali dovranno implementare la nuova API affinché il controllo integrità sia utilizzabile.
  • https://github.com/dotnet/efcore/pull/13306 - Aggiornare relationalTypeMapping di base per non impostare le dimensioni di DbParameter
    • Interrompere l'impostazione Dimensioni per impostazione predefinita perché può causare il troncamento. È possibile che i provider debbano aggiungere la propria logica se è necessario impostare Dimensioni.
  • https://github.com/dotnet/efcore/pull/13372 - RevEng: specificare sempre il tipo di colonna per le colonne decimali
    • Configurare sempre il tipo di colonna per le colonne decimali nel codice con scaffolding anziché configurarlo per convenzione.
    • I provider non devono richiedere alcuna modifica alla fine.
  • https://github.com/dotnet/efcore/pull/13469- Aggiunge CaseExpression per la generazione di espressioni CA SQL edizione Standard
  • https://github.com/dotnet/efcore/pull/13648 - Aggiunge la possibilità di specificare i mapping dei tipi in SqlFunctionExpression per migliorare l'inferenza del tipo di archivio degli argomenti e dei risultati.