Przed przenoszenie z programu EF6 do programu EF Core: Sprawdzanie poprawności wymagań aplikacjiBefore porting from EF6 to EF Core: Validate your Application's Requirements

Przed rozpoczęciem procesu przenoszenia należy sprawdzić, czy programu EF Core spełnia wymagania dotyczące dostępu do danych aplikacji.Before you start the porting process it is important to validate that EF Core meets the data access requirements for your application.

Brak funkcjiMissing features

Upewnij się, że programu EF Core zawiera wszystkie funkcje potrzebne do użycia w aplikacji.Make sure that EF Core has all the features you need to use in your application. Zobacz porównanie funkcji szczegółowe porównanie porównanie zestaw w wersji EF Core funkcji platformy EF6.See Feature Comparison for a detailed comparison of how the feature set in EF Core compares to EF6. Jeśli brakuje dowolnej wymagane funkcje, upewnij się, że możesz kompensuje braku tych funkcji, przed eksportowanie do programu EF Core.If any required features are missing, ensure that you can compensate for the lack of these features before porting to EF Core.

Zmiany zachowaniaBehavior changes

To jest niepełna lista zmian w zachowaniu między EF6 i EF Core.This is a non-exhaustive list of some changes in behavior between EF6 and EF Core. Należy zachować te należy pamiętać, jako port aplikacji zgodnie z ich może zmienić sposób, w jaki aplikacja działa, ale nie będą wyświetlane jako błędy kompilacji po zamianie do programu EF Core.It is important to keep these in mind as your port your application as they may change the way your application behaves, but will not show up as compilation errors after swapping to EF Core.

Zachowanie DbSet.Add/Attach i wykresDbSet.Add/Attach and graph behavior

W EF6 wywołanie DbSet.Add() na jednostki skutkuje Wyszukiwanie cykliczne dla wszystkich jednostek, do którego odwołuje się jego właściwości nawigacji.In EF6, calling DbSet.Add() on an entity results in a recursive search for all entities referenced in its navigation properties. Wszystkie jednostki, które znajdują się i nie są już śledzone przez kontekście, są również oznaczane w miarę dodawania.Any entities that are found, and are not already tracked by the context, are also be marked as added. DbSet.Attach() zachowuje się tak samo, z wyjątkiem wszystkie jednostki są oznaczone jako niezmieniony.DbSet.Attach() behaves the same, except all entities are marked as unchanged.

EF Core wykonuje wyszukiwanie cykliczne podobne, ale niektóre nieco inne reguły.EF Core performs a similar recursive search, but with some slightly different rules.

  • Jednostka główna jest zawsze żądany stan (dodane do DbSet.Add bez zmian dla DbSet.Attach).The root entity is always in the requested state (added for DbSet.Add and unchanged for DbSet.Attach).

  • W przypadku jednostek, które zostały znalezione w czasie cykliczne wyszukiwanie właściwości nawigacji:For entities that are found during the recursive search of navigation properties:

    • Jeśli klucz podstawowy jednostki jest generowany magazynuIf the primary key of the entity is store generated

      • Jeśli nie ustawiono klucza podstawowego z wartością, stan jest ustawiony do dodanych.If the primary key is not set to a value, the state is set to added. Wartość klucza podstawowego jest uznawany za "nie jest ustawiona" Jeśli jest ona przypisana wartość domyślna CLR dla typu właściwości (na przykład 0 dla int, null dla stringitp.).The primary key value is considered "not set" if it is assigned the CLR default value for the property type (for example, 0 for int, null for string, etc.).

      • Jeśli klucz podstawowy jest ustawiona na wartość, stan jest ustawiony bez zmian.If the primary key is set to a value, the state is set to unchanged.

    • Jeśli klucz podstawowy nie jest generowany w bazie danych, jednostka jest umieszczany w tym samym stanie, jako katalog główny.If the primary key is not database generated, the entity is put in the same state as the root.

Kod pierwszy inicjowanie bazy danychCode First database initialization

EF6 ma znacznej ilości magic, który wykonuje wokół wybranie połączenia z bazą danych i inicjowania bazy danych. Oto niektóre z tych reguł:EF6 has a significant amount of magic it performs around selecting the database connection and initializing the database. Some of these rules include:

  • Jeśli konfiguracja nie jest wykonywana, EF6 wybierze bazę danych programu SQL Express lub LocalDb.If no configuration is performed, EF6 will select a database on SQL Express or LocalDb.

  • Jeśli parametry połączenia z taką samą nazwę jak kontekstu znajduje się w aplikacji App/Web.config pliku, to połączenie będzie używane.If a connection string with the same name as the context is in the applications App/Web.config file, this connection will be used.

  • Jeśli baza danych nie istnieje, zostanie utworzony.If the database does not exist, it is created.

  • Jeśli żadna z tabel z modelu istnieje w bazie danych, schematów dla bieżącego modelu jest dodawany do bazy danych.If none of the tables from the model exist in the database, the schema for the current model is added to the database. Jeśli migracja jest włączona, następnie służą one do utworzenia bazy danych.If migrations are enabled, then they are used to create the database.

  • Jeśli baza danych istnieje i EF6 poprzednio utworzono schemat, schemat jest sprawdzane pod kątem zgodności z bieżącego modelu.If the database exists and EF6 had previously created the schema, then the schema is checked for compatibility with the current model. Wyjątek jest generowany, jeśli model został zmieniony od czasu utworzenia schematu.An exception is thrown if the model has changed since the schema was created.

EF Core nie wykonuje tego magic.EF Core does not perform any of this magic.

  • Połączenie z bazą danych muszą być jawnie skonfigurowane w kodzie.The database connection must be explicitly configured in code.

  • Inicjowanie nie jest wykonywane.No initialization is performed. Należy użyć DbContext.Database.Migrate() do zastosowania migracji (lub DbContext.Database.EnsureCreated() i EnsureDeleted() do tworzenia/usuwania bazy danych bez używania migracji).You must use DbContext.Database.Migrate() to apply migrations (or DbContext.Database.EnsureCreated() and EnsureDeleted() to create/delete the database without using migrations).

Pierwsza tabela kodu konwencje nazewnictwaCode First table naming convention

EF6 uruchamia Nazwa klasy jednostki za pośrednictwem usługi pluralizacja do obliczania jednostki jest mapowany na domyślną nazwę tabeli.EF6 runs the entity class name through a pluralization service to calculate the default table name that the entity is mapped to.

EF Core używa nazwy DbSet właściwości jednostki jest widoczna w w kontekście pochodnych.EF Core uses the name of the DbSet property that the entity is exposed in on the derived context. Jeśli jednostka ma DbSet właściwości, a następnie nazwę klasy jest używany.If the entity does not have a DbSet property, then the class name is used.