Uaktualnianie z EF Core 1.0 RC1 do 1.0 RC2Upgrading from EF Core 1.0 RC1 to 1.0 RC2

Ten artykuł zawiera wskazówki dotyczące przenoszenia aplikacji skompilowanej za pomocą pakietów RC1 do RC2.This article provides guidance for moving an application built with the RC1 packages to RC2.

Pakiet nazwy i wersjePackage Names and Versions

Między RC1 i RC2 możemy zmieniony z "Programu Entity Framework 7" na "Entity Framework Core".Between RC1 and RC2, we changed from "Entity Framework 7" to "Entity Framework Core". Możesz przeczytać dodatkowe informacje ze względu na zmianę w to post, w którym Scott Hanselman.You can read more about the reasons for the change in this post by Scott Hanselman. Z powodu tej zmiany nazwy naszych pakietu zmieniła się z EntityFramework.* do Microsoft.EntityFrameworkCore.* i naszych w wersjach od 7.0.0-rc1-final do 1.0.0-rc2-final (lub 1.0.0-preview1-final dla narzędzi).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).

Konieczne będzie całkowicie Usuń pakiety RC1, a następnie zainstaluj RC2 te.You will need to completely remove the RC1 packages and then install the RC2 ones. Oto mapowania dla niektórych typowych pakietów.Here is the mapping for some common packages.

Pakiet RC1RC1 Package Odpowiednik 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.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 Nie są jeszcze dostępne dla 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

NamespacesNamespaces

Wraz z nazwy pakietu, przestrzenie nazw zmieniła się z Microsoft.Data.Entity.* do Microsoft.EntityFrameworkCore.*.Along with package names, namespaces changed from Microsoft.Data.Entity.* to Microsoft.EntityFrameworkCore.*. Może obsłużyć tej zmiany z Znajdź/Zamień z using Microsoft.Data.Entity z using Microsoft.EntityFrameworkCore.You can handle this change with a find/replace of using Microsoft.Data.Entity with using Microsoft.EntityFrameworkCore.

Tabela zmian konwencji nazewnictwaTable Naming Convention Changes

Znaczące zmiany funkcjonalne Wybraliśmy w RC2 było użyć nazwy DbSet<TEntity> właściwości dla danej jednostki jako nazwy tabeli mapowania, a nie tylko nazwę klasy.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. Więcej o tej zmianie w problem pokrewne anonsu.You can read more about this change in the related announcement issue.

Istniejące aplikacje RC1, zaleca się dodanie poniższego kodu do uruchomienia programu OnModelCreating Metoda aktualizowania strategia nazewnictwa 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();
}

Jeśli chcesz przyjąć nowy strategia nazewnictwa może zalecamy pomyślnie Kończenie pozostałe kroki uaktualniania, a następnie usunięcie kodu i tworzenia migrację, aby zastosować tabelę zmienia nazwę.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 zmian (tylko dla projektów platformy ASP.NET Core)AddDbContext / Startup.cs Changes (ASP.NET Core Projects Only)

W RC1, trzeba było dodać usługi programu Entity Framework dla dostawcy usługi aplikacji — w 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"]));

RC2, można usunąć wywołań AddEntityFramework(), AddSqlServer()itp.:In RC2, you can remove the calls to AddEntityFramework(), AddSqlServer(), etc.:

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

Należy również Dodaj Konstruktor do pochodnej kontekstu, która przyjmuje opcje kontekstu i przekazuje je do podstawowego konstruktora.You also need to add a constructor, to your derived context, that takes context options and passes them to the base constructor. Jest to niezbędne, ponieważ firma Microsoft usunęła niektóre magic przerażenie, który je w snuck w tle: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)
{
}

W interfejsie IServiceProvider może być przekazywanyPassing in an IServiceProvider

Kod RC1, która przekazuje IServiceProvider do kontekstu, to teraz przeniesiono do DbContextOptions, a parametr oddzielne konstruktora.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. Użyj DbContextOptionsBuilder.UseInternalServiceProvider(...) można ustawić dostawcy usług.Use DbContextOptionsBuilder.UseInternalServiceProvider(...) to set the service provider.

TestowanieTesting

Najbardziej typowym scenariuszem dla tej czynności było kontrolowanie zakresu InMemory bazy danych podczas testowania.The most common scenario for doing this was to control the scope of an InMemory database when testing. Zobacz zaktualizowanego testowanie artykule przykład temu RC2.See the updated Testing article for an example of doing this with RC2.

Rozpoznawanie wewnętrznych usług od dostawcy usług aplikacji (tylko dla projektów platformy ASP.NET Core)Resolving Internal Services from Application Service Provider (ASP.NET Core Projects Only)

Jeśli korzystasz z aplikacji platformy ASP.NET Core i chcesz EF do rozpoznania usług wewnętrznego od dostawcy usług aplikacji, jest przeciążenie metody AddDbContext która pozwala na skonfigurowanie to: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)); );

Ostrzeżenie

Firma Microsoft zaleca stosowanie EF wewnętrznie Zarządzanie usługach, chyba że przyczyny, aby połączyć wewnętrznych usług EF w aplikacji usługodawcy.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. Głównym celem się, że chcesz to zrobić jest na potrzeby Zastąp usług, które jest używane wewnętrznie EF dostawcą usług aplikacjiThe main reason you may want to do this is to use your application service provider to replace services that EF uses internally

Polecenia DNX = > .NET interfejsu wiersza polecenia (tylko dla projektów platformy ASP.NET Core)DNX Commands => .NET CLI (ASP.NET Core Projects Only)

Jeśli poprzednio korzystano dnx ef poleceń dla projektów ASP.NET 5, te zostały przeniesione do dotnet ef poleceń.If you previously used the dnx ef commands for ASP.NET 5 projects, these have now moved to dotnet ef commands. Taka sama składnia polecenia nadal istnieje.The same command syntax still applies. Można użyć dotnet ef --help dla informacji o składni.You can use dotnet ef --help for syntax information.

Sposób zarejestrowanych poleceń została zmieniona w RC2 z powodu DNX zastępowane przez .NET interfejsu wiersza polecenia.The way commands are registered has changed in RC2, due to DNX being replaced by .NET CLI. Polecenia są obecnie zarejestrowane w tools sekcji 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"
    ]
  }
}

Porada

Jeśli używasz programu Visual Studio, można teraz używać konsoli Menedżera pakietów do uruchomienia poleceń EF dla projektów platformy ASP.NET Core (to nie jest obsługiwana w 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). Nadal musisz zarejestrować polecenia w tools sekcji project.json w tym celu.You still need to register the commands in the tools section of project.json to do this.

Menedżer pakietów polecenia wymagają programu PowerShell 5Package Manager Commands Require PowerShell 5

Użycie poleceń programu Entity Framework w konsoli Menedżera pakietów w programie Visual Studio, następnie należy upewnić się, że zainstalowana 5 programu PowerShell.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. Jest to wymagane tymczasowe, które zostaną usunięte w następnej wersji (zobacz wystawiać #5327 więcej szczegółów).This is a temporary requirement that will be removed in the next release (see issue #5327 for more details).

Za pomocą "imports" w pliku project.jsonUsing "imports" in project.json

Część EF Core zależności nie obsługują .NET Standard jeszcze.Some of EF Core's dependencies do not support .NET Standard yet. Podstawowe EF w projektach platformy .NET Standard i .NET Core mogą wymagać dodawanie "imports" do pliku project.json tymczasowo.EF Core in .NET Standard and .NET Core projects may require adding "imports" to project.json as a temporary workaround.

Podczas dodawania EF, przywracanie NuGet spowoduje wyświetlenie tego komunikatu o błędzie: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)

Obejście jest ręcznie zaimportować profil przenośnych "portable net451 + win8".The workaround is to manually import the portable profile "portable-net451+win8". To wymusza NuGet traktować to pliki binarne spełniające to Podaj jako zgodne framework przy użyciu platformy .NET Standard, nawet jeśli nie są one.This forces NuGet to treat this binaries that match this provide as a compatible framework with .NET Standard, even though they are not. Mimo że "portable net451 + win8" nie jest zgodny z .NET Standard 100%, jest zgodna wystarczająco przejście od PCL do .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. Importy można usunąć zależności w EF po pewnym czasie uaktualnić do wersji .NET Standard.Imports can be removed when EF's dependencies eventually upgrade to .NET Standard.

Wiele platform można dodać do "imports" w składni tablicy.Multiple frameworks can be added to "imports" in array syntax. Inne importów może być konieczne, jeśli Dodawanie dodatkowych bibliotek do projektu.Other imports may be necessary if you add additional libraries to your project.

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

Zobacz wystawiać #5176.See Issue #5176.