Przenoszenie modelu opartego na kodzie EF6 do programu EF CorePorting an EF6 Code-Based Model to EF Core

Jeśli wszystkie ostrzeżenia zostały przeczytane, możesz przystąpić do portu, poniżej przedstawiono wskazówki, które pomogą Ci rozpocząć pracę.If you've read all the caveats and you are ready to port, then here are some guidelines to help you get started.

Instalowanie pakietów programu EF Core NuGetInstall EF Core NuGet packages

Aby korzystać z programu EF Core, zainstaluj pakiet NuGet dla dostawcy bazy danych, którego chcesz użyć.To use EF Core, you install the NuGet package for the database provider you want to use. Na przykład, gdy obiektem docelowym programu SQL Server, można zainstalować Microsoft.EntityFrameworkCore.SqlServer.For example, when targeting SQL Server, you would install Microsoft.EntityFrameworkCore.SqlServer. Zobacz dostawcy baz danych Aby uzyskać szczegółowe informacje.See Database Providers for details.

Jeśli planujesz użyć migracje, a następnie należy również zainstalować Microsoft.EntityFrameworkCore.Tools pakietu.If you are planning to use migrations, then you should also install the Microsoft.EntityFrameworkCore.Tools package.

Jest dobrym rozwiązaniem pozostawić pakiet NuGet platformy EF6 (EntityFramework), zainstalowane, zgodnie z programem EF Core i EF6 mogą być używane side-by-side w tej samej aplikacji.It is fine to leave the EF6 NuGet package (EntityFramework) installed, as EF Core and EF6 can be used side-by-side in the same application. Jednak w przypadku korzystania z platformy EF6 w żadnych obszarów aplikacji nie są pomyślny przebieg operacji, następnie odinstalowaniu pakietu pomoże spowodować błędy kompilacji na fragmenty kodu, które wymagają uwagi.However, if you aren't intending to use EF6 in any areas of your application, then uninstalling the package will help give compile errors on pieces of code that need attention.

Przestrzenie nazw wymianySwap namespaces

Większość interfejsów API, których używasz w EF6 znajdują się w System.Data.Entity przestrzeni nazw (i pokrewnych przestrzeniach nazw sub).Most APIs that you use in EF6 are in the System.Data.Entity namespace (and related sub-namespaces). Pierwszy zmiana kodu jest można zamienić na Microsoft.EntityFrameworkCore przestrzeni nazw.The first code change is to swap to the Microsoft.EntityFrameworkCore namespace. Będzie zazwyczaj rozpocząć pochodnej kontekstu pliku kodu, a następnie pozwolimy na opracowanie stamtąd adresowania błędy kompilacji w miarę ich występowania.You would typically start with your derived context code file and then work out from there, addressing compilation errors as they occur.

Konfiguracja kontekstu (połączenie itp.)Context configuration (connection etc.)

Zgodnie z opisem w upewnij się, EF Core będzie pracy dla aplikacji, programem EF Core ma mniej magic wokół wykrywanie bazy danych, aby nawiązać połączenie.As described in Ensure EF Core Will Work for Your Application, EF Core has less magic around detecting the database to connect to. Należy zastąpić OnConfiguring metodę w pochodnej kontekstu i użyj interfejsu API określonego dostawcy bazy danych, aby skonfigurować połączenie z bazą danych.You will need to override the OnConfiguring method on your derived context, and use the database provider specific API to setup the connection to the database.

Większość aplikacji EF6 przechowywanie parametrów połączenia w aplikacjach App/Web.config pliku.Most EF6 applications store the connection string in the applications App/Web.config file. W programie EF Core przeczytanie tego parametry połączenia za pomocą ConfigurationManager interfejsu API.In EF Core, you read this connection string using the ConfigurationManager API. Może być konieczne dodanie odwołania do System.Configuration zestawu struktury, aby można było używać tego interfejsu API.You may need to add a reference to the System.Configuration framework assembly to be able to use this API.

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
      optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString);
    }
}

Aktualizowanie koduUpdate your code

W tym momencie jest kwestią adresowania błędy kompilacji i przeglądania kodu, aby zobaczyć zmiany zachowania będzie miało wpływ użytkownik.At this point, it's a matter of addressing compilation errors and reviewing code to see if the behavior changes will impact you.

Migracja istniejącychExisting migrations

Tak naprawdę nie jest to możliwe sposobu portu istniejących migracje platformy EF6 do programu EF Core.There isn't really a feasible way to port existing EF6 migrations to EF Core.

Jeśli to możliwe najlepiej Załóżmy, że zostały zastosowane wszystkie poprzednich migracji z programu EF6 do bazy danych, a następnie rozpoczęcia migracji schematu od tego punktu, przy użyciu programu EF Core.If possible, it is best to assume that all previous migrations from EF6 have been applied to the database and then start migrating the schema from that point using EF Core. Aby to zrobić, należy użyć Add-Migration polecenie do dodania do migracji, gdy model jest przenoszone do programu EF Core.To do this, you would use the Add-Migration command to add a migration once the model is ported to EF Core. Następnie należy usunąć cały kod z Up i Down metody szkieletu migracji.You would then remove all code from the Up and Down methods of the scaffolded migration. Porównuje następnej migracji do modelu podczas tej początkowej migracji został szkielet.Subsequent migrations will compare to the model when that initial migration was scaffolded.

Testowanie portuTest the port

Po prostu, ponieważ kompiluje aplikację, nie znaczy, że pomyślnie są przenoszone do programu EF Core.Just because your application compiles, does not mean it is successfully ported to EF Core. Należy przetestować wszystkie obszary w aplikacji, aby upewnić się, że żadne zmiany zachowania niekorzystnie wpłynąć na nie wpływ aplikacji.You will need to test all areas of your application to ensure that none of the behavior changes have adversely impacted your application.