La mise à niveau à partir d’EF Core 1.0 RC1 vers 1.0 RC2Upgrading from EF Core 1.0 RC1 to 1.0 RC2

Cet article fournit des conseils pour déplacer une application générée avec les packages de RC1 vers RC2.This article provides guidance for moving an application built with the RC1 packages to RC2.

Versions et les noms de packagePackage Names and Versions

Entre RC1 et RC2, nous avons modifié à partir de « Entity Framework 7 » à « Entity Framework Core ».Between RC1 and RC2, we changed from "Entity Framework 7" to "Entity Framework Core". Vous trouverez plus d’informations sur les raisons de la modification dans ce billet par Scott Hanselman.You can read more about the reasons for the change in this post by Scott Hanselman. Grâce à cette modification, les noms de package modifié à partir de EntityFramework.* à Microsoft.EntityFrameworkCore.* et nos versions de 7.0.0-rc1-final à 1.0.0-rc2-final (ou 1.0.0-preview1-final pour les outils).Because of this change, our package names changed from EntityFramework.* to Microsoft.EntityFrameworkCore.* and our versions from 7.0.0-rc1-final to 1.0.0-rc2-final (or 1.0.0-preview1-final for tooling).

Vous devrez supprimer complètement les packages de RC1, puis installez le RC2 celles.You will need to completely remove the RC1 packages and then install the RC2 ones. Voici le mappage pour certains packages courants.Here is the mapping for some common packages.

Package de RC1RC1 Package Équivalent de RC2RC2 Equivalent
EntityFramework.MicrosoftSqlServer 7.0.0-rc1-finalEntityFramework.MicrosoftSqlServer 7.0.0-rc1-final Microsoft.EntityFrameworkCore.SqlServer 1.0.0-rc2-finalMicrosoft.EntityFrameworkCore.SqlServer 1.0.0-rc2-final
EntityFramework.SQLite 7.0.0-rc1-finalEntityFramework.SQLite 7.0.0-rc1-final Microsoft.EntityFrameworkCore.Sqlite 1.0.0-rc2-finalMicrosoft.EntityFrameworkCore.Sqlite 1.0.0-rc2-final
EntityFramework7.Npgsql 3.1.0-rc1-3EntityFramework7.Npgsql 3.1.0-rc1-3 NpgSql.EntityFrameworkCore.Postgres NpgSql.EntityFrameworkCore.Postgres
EntityFramework.SqlServerCompact35 7.0.0-rc1-finalEntityFramework.SqlServerCompact35 7.0.0-rc1-final EntityFrameworkCore.SqlServerCompact35 1.0.0-rc2-finalEntityFrameworkCore.SqlServerCompact35 1.0.0-rc2-final
EntityFramework.SqlServerCompact40 7.0.0-rc1-finalEntityFramework.SqlServerCompact40 7.0.0-rc1-final EntityFrameworkCore.SqlServerCompact40 1.0.0-rc2-finalEntityFrameworkCore.SqlServerCompact40 1.0.0-rc2-final
EntityFramework.InMemory 7.0.0-rc1-finalEntityFramework.InMemory 7.0.0-rc1-final Microsoft.EntityFrameworkCore.InMemory 1.0.0-rc2-finalMicrosoft.EntityFrameworkCore.InMemory 1.0.0-rc2-final
EntityFramework.IBMDataServer 7.0.0-beta1EntityFramework.IBMDataServer 7.0.0-beta1 Pas encore disponible pour RC2Not yet available for RC2
EntityFramework.Commands 7.0.0-rc1-finalEntityFramework.Commands 7.0.0-rc1-final Microsoft.EntityFrameworkCore.Tools 1.0.0-preview1-finalMicrosoft.EntityFrameworkCore.Tools 1.0.0-preview1-final
EntityFramework.MicrosoftSqlServer.Design 7.0.0-rc1-finalEntityFramework.MicrosoftSqlServer.Design 7.0.0-rc1-final Microsoft.EntityFrameworkCore.SqlServer.Design 1.0.0-rc2-finalMicrosoft.EntityFrameworkCore.SqlServer.Design 1.0.0-rc2-final

Espaces de nomsNamespaces

Ainsi que les noms de package, espaces de noms a été remplacée par Microsoft.Data.Entity.* à Microsoft.EntityFrameworkCore.*.Along with package names, namespaces changed from Microsoft.Data.Entity.* to Microsoft.EntityFrameworkCore.*. Vous pouvez gérer cette modification avec une recherche/remplacement de using Microsoft.Data.Entity avec using Microsoft.EntityFrameworkCore.You can handle this change with a find/replace of using Microsoft.Data.Entity with using Microsoft.EntityFrameworkCore.

Modifications de la Convention d’affectation de noms de tableTable Naming Convention Changes

Une modification significative de fonctionnelle dans RC2, nous avons consistait à utiliser le nom de la DbSet<TEntity> propriété pour une entité donnée comme nom de table il est mappé, au lieu de simplement le nom de classe.A significant functional change we took in RC2 was to use the name of the DbSet<TEntity> property for a given entity as the table name it maps to, rather than just the class name. Vous trouverez plus d’informations sur cette modification dans le problème connexe annonce.You can read more about this change in the related announcement issue.

Pour les applications existantes de RC1, nous vous recommandons d’ajouter le code suivant au début de votre OnModelCreating méthode pour conserver la stratégie d’affectation de noms RC1 :For existing RC1 applications, we recommend adding the following code to the start of your OnModelCreating method to keep the RC1 naming strategy:

foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
    entity.Relational().TableName = entity.DisplayName();
}

Si vous souhaitez adopter la nouvelle stratégie d’affectation de noms, nous recommande correctement effectué le reste des étapes de mise à niveau et puis, en supprimant le code et création d’une migration pour appliquer la table renomme.If you want to adopt the new naming strategy, we would recommend successfully completing the rest of the upgrade steps and then removing the code and creating a migration to apply the table renames.

AddDbContext / Startup.cs change (uniquement pour les projets ASP.NET Core)AddDbContext / Startup.cs Changes (ASP.NET Core Projects Only)

Dans la version RC1, vous deviez ajouter des services d’Entity Framework au fournisseur de services d’application - dans Startup.ConfigureServices(...):In RC1, you had to add Entity Framework services to the application service provider - in Startup.ConfigureServices(...):

services.AddEntityFramework()
  .AddSqlServer()
  .AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(Configuration["ConnectionStrings:DefaultConnection"]));

Dans RC2, vous pouvez supprimer les appels à AddEntityFramework(), AddSqlServer(), etc. :In RC2, you can remove the calls to AddEntityFramework(), AddSqlServer(), etc.:

services.AddDbContext<ApplicationDbContext>(options =>
  options.UseSqlServer(Configuration["ConnectionStrings:DefaultConnection"]));

Vous devez également ajouter un constructeur, à votre contexte dérivé, qui accepte les options de contexte et les transmet au constructeur de base.You also need to add a constructor, to your derived context, that takes context options and passes them to the base constructor. Cela est nécessaire, car nous avons supprimé certaines la magie effrayant qui glissé dans les coulisses :This is needed because we removed some of the scary magic that snuck them in behind the scenes:

public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
    : base(options)
{
}

Passer par un IServiceProviderPassing in an IServiceProvider

Si vous avez le code RC1 qui passe une IServiceProvider au contexte, il a été déplacé vers DbContextOptions, au lieu d’être un paramètre de constructeur distinct.If you have RC1 code that passes an IServiceProvider to the context, this has now moved to DbContextOptions, rather than being a separate constructor parameter. Utilisez DbContextOptionsBuilder.UseInternalServiceProvider(...) pour définir le fournisseur de service.Use DbContextOptionsBuilder.UseInternalServiceProvider(...) to set the service provider.

TestTesting

Le scénario le plus courant pour effectuer cette opération était de contrôler la portée d’une base de données en mémoire lors du test.The most common scenario for doing this was to control the scope of an InMemory database when testing. Consultez la mise à jour test article pour obtenir un exemple de cette opération avec RC2.See the updated Testing article for an example of doing this with RC2.

Résolution des Services internes à partir du fournisseur de services d’Application (uniquement pour les projets ASP.NET Core)Resolving Internal Services from Application Service Provider (ASP.NET Core Projects Only)

Si vous avez une application ASP.NET Core et EF pour résoudre des services internes à partir du fournisseur de service d’application, il existe une surcharge de AddDbContext qui vous permet de configurer cela :If you have an ASP.NET Core application and you want EF to resolve internal services from the application service provider, there is an overload of AddDbContext that allows you to configure this:

services.AddEntityFrameworkSqlServer()
  .AddDbContext<ApplicationDbContext>((serviceProvider, options) =>
    options.UseSqlServer(Configuration["ConnectionStrings:DefaultConnection"])
           .UseInternalServiceProvider(serviceProvider)); );

Avertissement

Nous vous recommandons d’autoriser EF gérer en interne ses propres services, sauf si vous avez une raison de combiner les services EF internes dans votre fournisseur de services d’application.We recommend allowing EF to internally manage its own services, unless you have a reason to combine the internal EF services into your application service provider. La principale raison souhaitées pour ce faire consiste à utiliser votre fournisseur de services d’application pour remplacer les services EF utilise en interneThe main reason you may want to do this is to use your application service provider to replace services that EF uses internally

Les commandes DNX = > CLI de .NET (uniquement pour les projets ASP.NET Core)DNX Commands => .NET CLI (ASP.NET Core Projects Only)

Si vous avez utilisé précédemment le dnx ef commandes pour les projets ASP.NET 5, ceux-ci ont été déplacées vers dotnet ef commandes.If you previously used the dnx ef commands for ASP.NET 5 projects, these have now moved to dotnet ef commands. S’applique toujours la même syntaxe de commande.The same command syntax still applies. Vous pouvez utiliser dotnet ef --help pour des informations sur la syntaxe.You can use dotnet ef --help for syntax information.

Les commandes sont inscrits a été modifiée dans RC2, en raison de DNX, qui est remplacée par l’interface CLI .NET.The way commands are registered has changed in RC2, due to DNX being replaced by .NET CLI. Commandes sont maintenant enregistrés dans un tools section project.json:Commands are now registered in a tools section in project.json:

"tools": {
  "Microsoft.EntityFrameworkCore.Tools": {
    "version": "1.0.0-preview1-final",
    "imports": [
      "portable-net45+win8+dnxcore50",
      "portable-net45+win8"
    ]
  }
}

Conseil

Si vous utilisez Visual Studio, vous pouvez maintenant utiliser la Console du Gestionnaire de Package pour exécuter des commandes EF pour les projets ASP.NET Core (cela a été pas pris en charge dans la version RC1).If you use Visual Studio, you can now use Package Manager Console to run EF commands for ASP.NET Core projects (this was not supported in RC1). Vous devez toujours enregistrer les commandes dans le tools section de project.json pour ce faire.You still need to register the commands in the tools section of project.json to do this.

Commandes du Gestionnaire de package nécessitent PowerShell 5Package Manager Commands Require PowerShell 5

Si vous utilisez les commandes Entity Framework dans la Console du Gestionnaire de Package dans Visual Studio, vous devez vous assurer PowerShell 5 est installé.If you use the Entity Framework commands in Package Manager Console in Visual Studio, then you will need to ensure you have PowerShell 5 installed. Il s’agit d’une exigence temporaire qui sera supprimée dans la prochaine version (consultez émettre #5327 pour plus d’informations).This is a temporary requirement that will be removed in the next release (see issue #5327 for more details).

À l’aide de « imports » dans project.jsonUsing "imports" in project.json

Certaines des dépendances d’EF Core ne pas encore en charge .NET Standard.Some of EF Core's dependencies do not support .NET Standard yet. EF Core dans les projets .NET Standard et .NET Core peut nécessiter l’ajout de « imports » au fichier project.json en tant que solution de contournement temporaire.EF Core in .NET Standard and .NET Core projects may require adding "imports" to project.json as a temporary workaround.

Lors de l’ajout d’EF, restauration NuGet affiche ce message d’erreur :When adding EF, NuGet restore will display this error message:

Package Ix-Async 1.2.5 is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package Ix-Async 1.2.5 supports:
  - net40 (.NETFramework,Version=v4.0)
  - net45 (.NETFramework,Version=v4.5)
  - portable-net45+win8+wp8 (.NETPortable,Version=v0.0,Profile=Profile78)
Package Remotion.Linq 2.0.2 is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package Remotion.Linq 2.0.2 supports:
  - net35 (.NETFramework,Version=v3.5)
  - net40 (.NETFramework,Version=v4.0)
  - net45 (.NETFramework,Version=v4.5)
  - portable-net45+win8+wp8+wpa81 (.NETPortable,Version=v0.0,Profile=Profile259)

La solution de contournement consiste à importer manuellement le profil portable « portable-net451 + win8 ».The workaround is to manually import the portable profile "portable-net451+win8". Cette force NuGet à traiter cette binaires qui correspondent à ce fournir une infrastructure compatible avec .NET Standard, même si elles ne sont pas.This forces NuGet to treat this binaries that match this provide as a compatible framework with .NET Standard, even though they are not. « Portable-net451 + win8 » n’est pas 100 % compatible avec .NET Standard, mais il est suffisamment compatible pour la transition à partir de la bibliothèque de classes portable vers .NET Standard.Although "portable-net451+win8" is not 100% compatible with .NET Standard, it is compatible enough for the transition from PCL to .NET Standard. Les importations peuvent être supprimées lorsque les dépendances d’Entity Framework finira par mettre à niveau vers .NET Standard.Imports can be removed when EF's dependencies eventually upgrade to .NET Standard.

Plusieurs infrastructures peuvent être ajoutés à « imports » dans la syntaxe de tableau.Multiple frameworks can be added to "imports" in array syntax. Autres importations peuvent être nécessaires si vous ajoutez des bibliothèques supplémentaires à votre projet.Other imports may be necessary if you add additional libraries to your project.

{
  "frameworks": {
    "netcoreapp1.0": {
      "imports": ["dnxcore50", "portable-net451+win8"]
    }
  }
}

Consultez émettre #5176.See Issue #5176.