Condividi tramite


Aggiornamento a Entity Framework 6

Nelle versioni precedenti di EF il codice è stato suddiviso tra le librerie principali (principalmente System.Data.Entity.dll) fornite come parte di .NET Framework e librerie OOB (principalmente EntityFramework.dll) fornite in un pacchetto NuGet. EF6 accetta il codice dalle librerie principali e lo incorpora nelle librerie OOB. Ciò era necessario per consentire a EF di essere reso open source e di poter evolvere a un ritmo diverso da .NET Framework. Di conseguenza, è necessario ricompilare le applicazioni rispetto ai tipi spostati.

Questa operazione deve essere semplice per le applicazioni che usano DbContext come fornito in EF 4.1 e versioni successive. Per le applicazioni che usano ObjectContext è necessario un po' di lavoro, ma non è ancora difficile.

Ecco un elenco di controllo delle operazioni da eseguire per aggiornare un'applicazione esistente a EF6.

1. Installare il pacchetto NuGet di EF6

È necessario eseguire l'aggiornamento al nuovo runtime di Entity Framework 6.

  1. Fare clic con il pulsante destro del mouse sul progetto e scegliere Gestisci pacchetti NuGet...
  2. Nella scheda Online selezionare EntityFramework e fare clic su Installa

    Nota

    Se è stata installata una versione precedente del pacchetto NuGet EntityFramework, verrà aggiornata a EF6.

In alternativa, è possibile eseguire il comando seguente da Gestione pacchetti Console:

Install-Package EntityFramework

2. Assicurarsi che gli assembly facciano riferimento a System.Data.Entity.dll vengano rimossi

L'installazione del pacchetto NuGet EF6 rimuove automaticamente tutti i riferimenti a System.Data.Entity dal progetto.

3. Scambiare tutti i modelli EDMX (EF Designer) per usare la generazione di codice EF 6.x

Se sono stati creati modelli con Entity Framework Designer, sarà necessario aggiornare i modelli di generazione del codice per generare codice compatibile con EF6.

Nota

Attualmente sono disponibili solo modelli DbContext Generator di Entity Framework 6.x per Visual Studio 2012 e 2013.

  1. Eliminare modelli di generazione di codice esistenti. Questi file verranno in genere denominati <edmx_file_name.tt> e <edmx_file_name.Context.tt> e annidati nel file edmx in Esplora soluzioni. È possibile selezionare i modelli in Esplora soluzioni e premere CANC per eliminarli.

    Nota

    Nei progetti del sito Web i modelli non verranno annidati nel file edmx, ma elencati insieme a esso in Esplora soluzioni.

    Nota

    In VB.NET progetti è necessario abilitare "Mostra tutti i file" per visualizzare i file modello annidati.

  2. Aggiungere il modello di generazione del codice EF 6.x appropriato. Aprire il modello in Ef Designer, fare clic con il pulsante destro del mouse sull'area di progettazione e selezionare Aggiungi elemento generazione codice...

    • Se si usa l'API DbContext (scelta consigliata), EF 6.x DbContext Generator sarà disponibile nella scheda Dati .

      Nota

      Se si usa Visual Studio 2012, sarà necessario installare EF 6 Tools per avere questo modello. Per informazioni dettagliate, vedere Ottenere Entity Framework .

    • Se si usa l'API ObjectContext, sarà necessario selezionare la scheda Online e cercare EF 6.x EntityObject Generator.

  3. Se sono state applicate personalizzazioni ai modelli di generazione del codice, sarà necessario riapplicarli ai modelli aggiornati.

4. Aggiornare gli spazi dei nomi per qualsiasi tipo ef core in uso

Gli spazi dei nomi per i tipi DbContext e Code First non sono stati modificati. Ciò significa che per molte applicazioni che usano EF 4.1 o versione successiva non sarà necessario modificare nulla.

I tipi come ObjectContext precedentemente presenti in System.Data.Entity.dll sono stati spostati in nuovi spazi dei nomi. Ciò significa che potrebbe essere necessario aggiornare le direttive using o Import per la compilazione in EF6.

La regola generale per le modifiche dello spazio dei nomi è che qualsiasi tipo in System.Data.* viene spostato in System.Data.Entity.Core.*. In altre parole, inserire Entity.Core dopo System.Data. Ad esempio:

  • System.Data.EntityException => System.Data.Entity.Core. Entityexception
  • System.Data.Objects.ObjectContext => System.Data.Entity.Core. Objects.ObjectContext
  • System.Data.Objects.DataClasses.RelationshipManager => System.Data.Entity.Core. Objects.DataClasses.RelationshipManager

Questi tipi si trovano negli spazi dei nomi Core perché non vengono usati direttamente per la maggior parte delle applicazioni basate su DbContext. Alcuni tipi che fanno parte di System.Data.Entity.dll vengono ancora usati comunemente e direttamente per le applicazioni basate su DbContext e quindi non sono stati spostati negli spazi dei nomi Core . Sono inclusi:

  • System.Data.EntityState => System.Data.Entità. EntityState
  • System.Data.Objects.DataClasses.EdmFunctionAttribute => System.Data.Entity.DbFunctionAttribute

    Nota

    Questa classe è stata rinominata; esiste ancora una classe con il nome precedente e funziona, ma ora contrassegnata come obsoleta.

  • System.Data.Objects.EntityFunctions => System.Data.Entity.DbFunctions

    Nota

    Questa classe è stata rinominata; esiste ancora una classe con il nome precedente e funziona, ma ora contrassegnata come obsoleta.

  • Le classi spaziali( ad esempio DbGeography, DbGeometry) sono state spostate da System.Data.Spatial => System.Data.Entità. Spaziale

Nota

Alcuni tipi nello spazio dei nomi System.Data si trovano in System.Data.dll che non è un assembly EF. Questi tipi non sono stati spostati e quindi gli spazi dei nomi rimangono invariati.