Udostępnij za pośrednictwem


Porównanie programów EF Core i EF6

EF Core

Rozwiązanie Entity Framework Core (EF Core) to nowoczesny maper obiektów i baz danych dla platformy .NET. Obsługuje ono zapytania LINQ, śledzenie zmian, aktualizacje i migracje schematów.

Rozwiązanie EF Core współpracuje z oprogramowaniem SQL Server/Azure SQL Database, SQLite, Azure Cosmos DB, MySQL, PostgreSQL i wieloma innymi bazami danych za pośrednictwem modelu wtyczek dostawców baz danych.

EF6

Rozwiązanie Entity Framework 6 (EF6) to maper obiektowo-relacyjny zaprojektowany dla platformy .NET Framework i obsługujący platformę .NET Core. Rozwiązanie EF6 jest stabilnym i obsługiwanym produktem, ale nie jest już aktywnie rozwijane.

Porównanie funkcji

Rozwiązanie EF Core oferuje nowe funkcje, które nie zostaną zaimplementowane w rozwiązaniu EF6. Jednak nie wszystkie funkcje rozwiązania EF6 są obecnie zaimplementowane w rozwiązaniu EF Core.

W poniższych tabelach porównano funkcje dostępne w rozwiązaniach EF Core i EF6. Jest to porównanie wysokiego poziomu i nie uwzględnia każdej funkcji ani nie objaśnia różnic między tą samą funkcją w różnych wersjach rozwiązania EF.

Kolumna EF Core wskazuje wersję produktu, w której dana funkcja pojawiła się po raz pierwszy.

Tworzenie modelu

Funkcja EF 6.4 EF Core
Podstawowe mapowanie klas Tak 1.0
Konstruktory z parametrami 2.1
Konwersje wartości właściwości 2.1
Mapowane typy bez kluczy 2.1
Konwencje Tak 1.0
Konwencje niestandardowe Tak 7.0
Adnotacje do danych Tak 1.0
Płynny interfejs API Tak 1.0
Dziedziczenie: tabela na hierarchię (TPH, Table Per Hierarchy) Tak 1.0
Dziedziczenie: tabela na typ (TPT, Table Per Type) Tak 5,0
Dziedziczenie: tabela na konkretną klasę (TPC, Table Per Concrete Class) Tak 7.0
Właściwości stanu towarzyszącego 1.0
Klucze alternatywne 1.0
Nawigacja wiele-do-wielu Tak 5,0
Relacje wiele-do-wielu bez jednostki sprzężenia Tak 5,0
Generowanie kluczy: baza danych Tak 1.0
Generowanie kluczy: klient 1.0
Typy złożone/własnościowe Tak 2.0
Dane przestrzenne Tak 2,2
Format modelu: kod Tak 1.0
Tworzenie modelu na podstawie bazy danych: wiersz polecenia Tak 1.0
Aktualizowanie modelu na podstawie bazy danych Częściowe Na liście prac (#831)
Filtry zapytań globalnych 2.0
Dzielenie tabeli Tak 2.0
Dzielenie jednostki Tak 7.0
Mapowanie skalarnych funkcji bazy danych Słaba 2.0
Mapowanie funkcji bazy danych o wartościach tabel Słaba 5,0
Mapowanie pól 1.1
Typy referencyjne dopuszczające wartość null (C# 8.0) 3.0
Graficzna wizualizacja modelu Tak Obsługa nie jest planowana (1)
Edytor modeli graficznych Tak Obsługa nie jest planowana (1)
Format modelu: EDMX (XML) Tak Obsługa nie jest planowana (1)
Tworzenie modelu na podstawie bazy danych: kreator programu VS Tak Obsługa nie jest planowana (1)

Wykonywanie zapytań na danych

Funkcja EF 6.4 EF Core
zapytania LINQ Tak 1.0
Czytelny generowany kod SQL Słaba 1.0
Przekształcanie operacji „grupuj według” Tak 2.1
Ładowanie powiązanych danych: wczesne Tak 1.0
Ładowanie powiązanych danych: wczesne ładowanie dla typów pochodnych 2.1
Ładowanie powiązanych danych: opóźnione Tak 2.1
Ładowanie powiązanych danych: jawne Tak 1.1
Nieprzetworzone zapytania SQL: typy jednostek Tak 1.0
Nieprzetworzone zapytania SQL: typy jednostek bez klucza Tak 2.1
Nieprzetworzone zapytania SQL: łączenie przy użyciu języka LINQ 1.0
Jawnie kompilowane zapytania Słaba 2.0
Instrukcja await foreach (C# 8.0) 3.0
Język zapytań oparty na tekście (Entity SQL) Tak Obsługa nie jest planowana (1)

Zapisywanie danych

Funkcja EF 6.4 EF Core
Śledzenie zmian: migawki Tak 1.0
Śledzenie zmian: powiadamianie Tak 1.0
Śledzenie zmian: obiekty proxy Tak 5,0
Uzyskiwanie dostępu do śledzonego stanu Tak 1.0
Optymistyczna współbieżność Tak 1.0
Transakcje Tak 1.0
Przetwarzanie wsadowe instrukcji 1.0
Mapowanie procedury składowanej Tak 7.0
Interfejsy API niskiego poziomu dla odłączonego grafu Słaba 1.0
Kompleksowa obsługa odłączonego grafu 1.0 (częściowo; #5536)

Inne funkcje

Funkcja EF 6.4 EF Core
Migracje Tak 1.0
Interfejsy API tworzenia/usuwania w bazie danych Tak 1.0
Dane inicjowania Tak 2.1
Odporność połączenia Tak 1.1
Interceptory Tak 3.0
Wydarzenia Tak 3.0 (częściowo; #626)
Proste rejestrowanie (Database.Log) Tak 5,0
Buforowanie obiektów DbContext 2.0

Dostawcy baz danych (2)

Funkcja EF 6.4 EF Core
SQL Server Tak 1.0
MySQL Tak 1.0
PostgreSQL Tak 1.0
Oracle Tak 1.0
SQLite Tak 1.0
SQL Server Compact Tak 1.0 (3)
DB2 Tak 1.0
Firebird Tak 2.0
Jet (Microsoft Access) 2.0 (3)
Azure Cosmos DB 3.0
W pamięci (na potrzeby testowania) 1.0

1 Niektóre funkcje rozwiązania EF6 nie zostaną zaimplementowane w rozwiązaniu EF Core. Te funkcje są zależne od bazowego modelu Entity Data Model (EDM) w rozwiązaniu EF6 i/lub są złożonymi funkcjami o stosunkowo niskim zwrocie z inwestycji. Zawsze chętnie przyjmujemy opinie, ale rozwiązanie EF Core oferuje wiele funkcji niedostępnych w rozwiązaniu EF6, a z drugiej strony nie może obsługiwać wszystkich funkcji rozwiązania EF6.

2 Dostawcy baz danych dla rozwiązania EF Core zaimplementowani przez inne firmy mogą być opóźnieni pod względem aktualizacji w porównaniu z nowymi głównymi wersjami rozwiązania EF Core. Aby uzyskać więcej informacji, zobacz Dostawcy baz danych.

3 Dostawcy SQL Server Compact i Jet działają tylko na platformie .NET Framework (nie na platformie .NET Core).

Obsługiwane platformy

Rozwiązanie EF Core 3.1 działa na platformach .NET Core i .NET Framework dzięki użyciu platformy .NET Standard 2.0. Jednak rozwiązanie EF Core 5.0 nie działa na platformie .NET Framework. Aby uzyskać więcej informacji, zobacz Platformy.

Rozwiązanie EF6.4 działa na platformach .NET Core i .NET Framework dzięki wielowersyjności.

Wskazówki dotyczące nowych aplikacji

Korzystaj z rozwiązania EF Core na platformie .NET Core w przypadku wszystkich nowych aplikacji, chyba że dana aplikacja wymaga czegoś, co jest obsługiwane tylko na platformie .NET Framework.

Wskazówki dotyczące istniejących aplikacji korzystających z rozwiązania EF6

Rozwiązanie EF Core nie jest bezpośrednim zamiennikiem dla rozwiązania EF6. Przejście z rozwiązania EF6 do rozwiązania EF Core prawdopodobnie będzie wymagać zmian w aplikacji.

W przypadku przenoszenia aplikacji korzystających z rozwiązania EF6 na platformę .NET Core:

  • Nadal korzystaj z rozwiązania EF6, jeśli kod obsługujący dostęp do danych jest stabilny i prawdopodobnie nie będzie ewoluował ani wymagał nowych funkcji.
  • Przeprowadź migrację do rozwiązania EF Core, jeśli kod obsługujący dostęp do danych ewoluuje lub jeśli aplikacja potrzebuje nowych funkcji dostępnych tylko w rozwiązaniu EF Core.
  • Migracja do rozwiązania EF Core jest też często wykonywana ze względu na wydajność. Jednak nie wszystkie scenariusze zapewniają wzrost szybkości, więc najpierw wykonaj profilowanie.

Aby uzyskać więcej informacji, zobacz Migracja z rozwiązania EF6 do rozwiązania EF Core.