Przed eksportowanie z EF6 do 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 podstawowe EF 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 podstawowe EF ma wszystkich funkcji potrzebnych 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 jak porównuje EF6 zestawu w EF podstawowych funkcji.See Feature Comparison for a detailed comparison of how the feature set in EF Core compares to EF6. Brakuje niektórych wymaganych funkcji, upewnij się, że można zniwelować braku te funkcje przed eksportowanie do 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 sposobu działaniaBehavior changes

Jest niepełna lista pewne zmiany w zachowaniu między EF6 i EF podstawowe.This is a non-exhaustive list of some changes in behavior between EF6 and EF Core. Należy zachować te pamiętać jako port aplikacji, ponieważ mogą one ulec zmianie sposób aplikacja działa, ale nie będą widoczne jako błędy kompilacji po wymiany na EF rdzeń.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.

Wykres i DbSet.Add/Attach zachowanieDbSet.Add/Attach and graph behavior

W EF6 wywoływania DbSet.Add() na powoduje cykliczne wyszukiwanie wszystkich jednostek, do którego odwołuje się jego właściwości nawigacji jednostki.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 zostały znalezione i nie są już śledzone przez kontekst, również są oznaczone jako dodane.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 bez zmian.DbSet.Attach() behaves the same, except all entities are marked as unchanged.

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

  • Obiekt główny jest zawsze w żądany stan (dodany 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).

  • Dla obiektów, które zostały znalezione podczas cyklicznego wyszukiwania właściwości nawigacji:For entities that are found during the recursive search of navigation properties:

    • W przypadku klucza podstawowego jednostki wygenerowaneIf the primary key of the entity is store generated

      • Jeśli klucz podstawowy nie jest ustawiona na wartość, stan jest ustawiony do dodany.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" przypisane wartości domyślne CLR dla typu właściwości (tj. 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 (i.e. 0 for int, null for string, etc.).

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

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

Kod pierwszego inicjowania bazy danychCode First database initialization

EF6 ma dużą magic, którą 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 bazy 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 o tej samej nazwie jako kontekst jest w aplikacjach App/Web.config plików, 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, jest tworzony.If the database does not exist, it is created.

  • Jeśli żadna z tabel z modelu nie istnieją w bazie danych, schematu 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 włączono migracje, następnie są one używane do utworzenia bazy danych.If migrations are enabled, then they are used to create the database.

  • Jeśli baza danych istnieje i EF6 wcześniej utworzyć schemat, schemat jest sprawdzane pod kątem zgodności z bieżącym modelem.If the database exists and EF6 had previously created the schema, then the schema is checked for compatibility with the current model. Jeśli model został zmieniony od czasu utworzenia schematu, jest zgłaszany wyjątek.An exception is thrown if the model has changed since the schema was created.

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

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

  • Inicjowanie nie jest wykonywana.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 korzystania z migracji).You must use DbContext.Database.Migrate() to apply migrations (or DbContext.Database.EnsureCreated() and EnsureDeleted() to create/delete the database without using migrations).

Kod konwencji nazewnictwa pierwszej tabeli.Code First table naming convention

EF6 uruchamia Nazwa klasy jednostki za pośrednictwem usługi określania liczby mnogiej do obliczenia jednostka jest zamapowana na domyślna nazwa tabeli.EF6 runs the entity class name through a pluralization service to calculate the default table name that the entity is mapped to.

Podstawowe EF używa nazwy DbSet właściwości jednostki jest widoczna w pochodnej kontekstu.EF Core uses the name of the DbSet property that the entity is exposed in on the derived context. Jeśli taka jednostka nie posiada 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.