Aktualisieren von EF Core 1.0 RC1 auf RC2 1.0Upgrading from EF Core 1.0 RC1 to 1.0 RC2

Dieser Artikel enthält die Anleitung zum Verschieben einer Anwendung, die mit den Paketen RC1 auf RC2 erstellt.This article provides guidance for moving an application built with the RC1 packages to RC2.

Paketnamen und VersionenPackage Names and Versions

Zwischen RC1 und RC2 geändert von "Entity Framework 7", "Entity Framework Core".Between RC1 and RC2, we changed from "Entity Framework 7" to "Entity Framework Core". Erfahren Sie mehr über die Gründe für die Änderung der diesen Beitrag von Scott Hanselman.You can read more about the reasons for the change in this post by Scott Hanselman. Aufgrund dieser Änderung unserer Paketnamen geändert EntityFramework.* auf Microsoft.EntityFrameworkCore.* und unsere-Versionen 7.0.0-rc1-final auf 1.0.0-rc2-final (oder 1.0.0-preview1-final für Tools).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).

Sie müssen die Pakete RC1 vollständig zu entfernen und installieren Sie die RC2 verfügen.You will need to completely remove the RC1 packages and then install the RC2 ones. Hier ist die Zuordnung für einige allgemeine Pakete aus.Here is the mapping for some common packages.

RC1-PaketRC1 Package RC2-EntsprechungRC2 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.PostgresNpgSql.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 Für RC2 noch nicht verfügbarNot 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

NamespacesNamespaces

Zusammen mit den Paketnamen, Namespaces, die von geändert Microsoft.Data.Entity.* auf Microsoft.EntityFrameworkCore.*.Along with package names, namespaces changed from Microsoft.Data.Entity.* to Microsoft.EntityFrameworkCore.*. Sie können diese Änderung mit einem Suchen/Ersetzen von behandeln using Microsoft.Data.Entity mit using Microsoft.EntityFrameworkCore.You can handle this change with a find/replace of using Microsoft.Data.Entity with using Microsoft.EntityFrameworkCore.

Tabelle Naming Convention-ÄnderungenTable Naming Convention Changes

Eine wesentliche funktionale Änderung, die wir in RC2 dauerte wurde auf den Namen der DbSet<TEntity> -Eigenschaft für eine bestimmte Entität als Namen der Tabelle zugeordnet, anstatt nur der Klassenname.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. Erfahren Sie mehr über diese Änderung in das verwandte Ankündigung Problem.You can read more about this change in the related announcement issue.

Bei vorhandenen RC1-Anwendungen sollten den folgenden Code am Anfang des Hinzufügen Ihrer OnModelCreating Methode, die RC1 Benennungsstrategie beizubehalten: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();
}

Wenn Sie die neue Benennungsstrategie übernehmen möchten, würden erfolgreich empfohlen benennt Abschließen der Rest der Upgradeschritte und klicken Sie dann den Code entfernt und erstellen eine Migration aus, um die Tabelle anwenden.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 ändert (gilt nur für ASP.NET Core-Projekte)AddDbContext / Startup.cs Changes (ASP.NET Core Projects Only)

In RC1, mussten Sie Entity Framework-Dienste in der Anwendung-Dienstanbieter - hinzufügen 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"]));

In RC2, entfernen Sie die Aufrufe von AddEntityFramework(), AddSqlServer()usw..:In RC2, you can remove the calls to AddEntityFramework(), AddSqlServer(), etc.:

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

Sie müssen auch einen Konstruktor den abgeleiteten Kontext hinzufügen, nimmt die Kontextoptionen und übergibt sie an den Basiskonstruktor.You also need to add a constructor, to your derived context, that takes context options and passes them to the base constructor. Dies ist erforderlich, da wir einige furchterregend Magic entfernt, die sie in den Hintergrund eingeschmuggelt habe: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)
{
}

Übergabe eines IServiceProviderPassing in an IServiceProvider

Wenn Sie RC1-Code verfügen, der übergibt ein IServiceProvider an den Kontext, dies jetzt verschoben wurde DbContextOptions, anstatt eine separate Konstruktorparameter.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. Verwendung DbContextOptionsBuilder.UseInternalServiceProvider(...) den Dienstanbieter festgelegt.Use DbContextOptionsBuilder.UseInternalServiceProvider(...) to set the service provider.

TestTesting

Das häufigste Szenario für diese Vorgehensweise wurde um den Bereich einer InMemory-Datenbank steuern, beim Testen.The most common scenario for doing this was to control the scope of an InMemory database when testing. Finden Sie unter den aktualisierten Test Artikel ein Beispiel hierfür RC2.See the updated Testing article for an example of doing this with RC2.

Zum Auflösen von internen Diensten aus Application Service Provider (gilt nur für ASP.NET Core-Projekte)Resolving Internal Services from Application Service Provider (ASP.NET Core Projects Only)

Wenn Sie eine ASP.NET Core-Anwendung und EF zum Auflösen der internen Dienste vom Anwendungsdienstanbieter angezeigt werden sollen, ist eine Überladung der AddDbContext , mit der Sie zum Konfigurieren dieser: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)); );

Warnung

Es wird empfohlen, EF zur Verwaltung von intern einen eigenen Diensten ermöglichen, es sei denn, Sie einen Grund haben für die interne EF-Dienste in Ihrer Anwendungsdienstanbieter kombinieren.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. Die Hauptgründe dafür, dass Sie dies tun möchten wird an Ihren Dienstanbieter, Anwendung verwenden, um Dienste zu ersetzen, die EF intern verwendetThe main reason you may want to do this is to use your application service provider to replace services that EF uses internally

DNX-Befehle = > .NET CLI (gilt nur für ASP.NET Core-Projekte)DNX Commands => .NET CLI (ASP.NET Core Projects Only)

Wenn Sie zuvor verwendet die dnx ef -Befehle für ASP.NET 5-Projekte, diese haben jetzt verschoben dotnet ef Befehle.If you previously used the dnx ef commands for ASP.NET 5 projects, these have now moved to dotnet ef commands. Die gleichen Befehlssyntax gilt weiterhin.The same command syntax still applies. Sie können dotnet ef --help Informationen zur Syntax.You can use dotnet ef --help for syntax information.

Die Möglichkeit, die Befehle registriert sind, wurde in RC2 aufgrund von DNX mit .NET CLI ersetzt wird geändert.The way commands are registered has changed in RC2, due to DNX being replaced by .NET CLI. Befehle sind nun registriert, einem tools im Abschnitt 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"
    ]
  }
}

Tipp

Wenn Sie Visual Studio verwenden, können Sie jetzt Paket-Manager-Konsole verwenden, EF-Befehle für ASP.NET Core Projekte ausführen (Dies wurde nicht in RC1 unterstützt).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). Müssen Sie immer noch die Befehle in Registrieren der tools Abschnitt project.json dazu.You still need to register the commands in the tools section of project.json to do this.

Paket-Manager-Befehle erfordern PowerShell 5Package Manager Commands Require PowerShell 5

Wenn Sie die Entity Framework-Befehle in der Paket-Manager-Konsole in Visual Studio verwenden, müssen Sie sicherstellen, dass Sie PowerShell 5 installiert ist.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. Dies ist eine temporäre Anforderung, die in der nächsten Version entfernt wird (finden Sie unter ausstellen #5327 Weitere Details).This is a temporary requirement that will be removed in the next release (see issue #5327 for more details).

Verwenden von "Imports" in "Project.JSON"Using "imports" in project.json

Einige der EF kernabhängigkeiten unterstützt .NET Standard noch nicht.Some of EF Core's dependencies do not support .NET Standard yet. Hinzufügen von "imports" auf "Project.JSON" als vorübergehende problemumgehung ist EF Core in standardmäßigen .NET und .NET Core-Projekte erfordern.EF Core in .NET Standard and .NET Core projects may require adding "imports" to project.json as a temporary workaround.

Beim Hinzufügen von EF wird NuGet Restore diese Fehlermeldung angezeigt: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)

Die problemumgehung besteht darin, die portable Profil "Portable net451 + win8" manuell importieren.The workaround is to manually import the portable profile "portable-net451+win8". Diese erzwingt NuGet, diese Binärdateien behandelt werden sollen, die dies entsprechen bieten als kompatibel mit dem standardmäßigen .NET Framework, obwohl sie nicht sind.This forces NuGet to treat this binaries that match this provide as a compatible framework with .NET Standard, even though they are not. Obwohl "Portable net451 + win8" nicht 100 % mit .NET Standard kompatibel ist, ist es kompatibel genug für den Übergang vom PCL .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. Importe können entfernt werden, wenn EF Abhängigkeiten schließlich auf .NET Standard aktualisieren.Imports can be removed when EF's dependencies eventually upgrade to .NET Standard.

Mehrere Frameworks können "Imports" in der Arraysyntax hinzugefügt werden.Multiple frameworks can be added to "imports" in array syntax. Andere Importe ist möglicherweise erforderlich, wenn Sie zusätzliche Bibliotheken zu Ihrem Projekt hinzufügen.Other imports may be necessary if you add additional libraries to your project.

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

Finden Sie unter ausstellen #5176.See Issue #5176.