Mettez à niveau 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 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 pouvez en savoir plus sur les raisons de la modification de 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 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 RC1, puis installez RC2 ceux.You will need to completely remove the RC1 packages and then install the RC2 ones. Voici le mappage de certains packages courantes.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 et le 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 fonctionnelle, nous avons pris dans RC2 consistait à utiliser le nom de la DbSet<TEntity> propriété pour une entité donnée en tant que nom de la table qu’il est mappé, plutôt que 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 pouvez en savoir plus 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 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 vous recommandons de 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 (projets ASP.NET Core uniquement)AddDbContext / Startup.cs Changes (ASP.NET Core Projects Only)

Dans la version RC1, vous deviez ajouter des services d’Entity Framework pour le 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ée, qui prend des 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 l’astuce inquiétant 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)
{
}

En passant un IServiceProvider.Passing in an IServiceProvider

Si vous avez un code RC1 qui transmet un IServiceProvider au contexte, cela est passée à DbContextOptions, au lieu d’en cours d’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 cette opération a été pour 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 de fournisseur de services d’Application (projets ASP.NET Core uniquement)Resolving Internal Services from Application Service Provider (ASP.NET Core Projects Only)

Si vous avez une application ASP.NET Core et que vous souhaitez EF pour résoudre des services internes à partir du fournisseur de service d’application, il est 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 ce qui permet de EF à gérer en interne de ses propres services, à moins que vous n’ayez une raison pour 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é 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

Commandes DNX = > .NET CLI (projets ASP.NET Core uniquement)DNX Commands => .NET CLI (ASP.NET Core Projects Only)

Si vous avez déjà utilisé le dnx ef commandes pour les projets ASP.NET 5, ils ont été déplacés à 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 remplacé par l’infrastructure du langage commun .NET.The way commands are registered has changed in RC2, due to DNX being replaced by .NET CLI. Commandes sont désormais 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 5 PowerShell 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 condition temporaire qui sera supprimée dans la prochaine version (voir é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 « importations » dans project.jsonUsing "imports" in project.json

Certaines des dépendances de base de EF ne pas prennent en charge .NET Standard encore.Some of EF Core's dependencies do not support .NET Standard yet. Core EF dans les projets .NET Standard et .NET Core peut nécessiter l’ajout de « importe » dans 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.

Lorsque vous ajoutez EF, NuGet restore 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 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 à cette fournit 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 compatible avec .NET Standard à 100 %, mais il est assez compatible pour la transition à partir de la bibliothèque de classes portables .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’EF éventuellement mettre à niveau vers .NET Standard.Imports can be removed when EF's dependencies eventually upgrade to .NET Standard.

Plusieurs infrastructures peuvent être ajoutés aux « importations » 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.