Udostępnij za pośrednictwem


Porównanie programów EF Core i EF6

EF Core

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

Program EF Core współpracuje z bazami danych SQL Server/Azure SQL Database, SQLite, Azure Cosmos DB, MySQL, PostgreSQL i wieloma większą liczbą baz danych za pośrednictwem modelu wtyczki dostawcy bazy danych.

EF6

Entity Framework 6 (EF6) to maper obiektowo-relacyjny przeznaczony dla platformy .NET Framework, ale z obsługą platformy .NET Core. EF6 jest stabilnym, obsługiwanym produktem, ale nie jest już aktywnie opracowywany.

Porównanie funkcji

Program EF Core oferuje nowe funkcje, które nie zostaną zaimplementowane w programie EF6. Jednak nie wszystkie funkcje EF6 są obecnie implementowane w programie EF Core.

W poniższych tabelach porównaliśmy funkcje dostępne w programach EF Core i EF6. Jest to porównanie wysokiego poziomu i nie wyświetla listy każdej funkcji ani nie wyjaśnia różnic między tą samą funkcją w różnych wersjach programu EF.

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

Tworzenie modelu

Funkcja EF6.4 EF Core
Mapowanie klas podstawowych Yes 1.0
Konstruktory z parametrami 2.1
Konwersje wartości właściwości 2.1
Zamapowane typy bez kluczy 2.1
Conventions Yes 1.0
Konwencje niestandardowe Yes 7.0
Adnotacje danych Yes 1.0
Fluent API Yes 1.0
Dziedziczenie: tabela na hierarchię (TPH) Yes 1.0
Dziedziczenie: Tabela na typ (TPT) Yes 5.0
Dziedziczenie: Tabela dla konkretnej klasy (TPC) Yes 7.0
Właściwości stanu cień 1.0
Klucze alternatywne 1.0
Nawigacja wiele-do-wielu Yes 5.0
Wiele do wielu bez jednostki sprzężenia Yes 5.0
Generowanie klucza: baza danych Yes 1.0
Generowanie klucza: Klient 1.0
Typy złożone/własnościowe Yes 2.0
Dane przestrzenne Yes 2,2
Format modelu: Kod Yes 1.0
Tworzenie modelu na podstawie bazy danych: wiersz polecenia Yes 1.0
Aktualizowanie modelu z bazy danych Częściowy Na liście zaległości (#831)
Filtry zapytań globalnych 2.0
Dzielenie tabeli Yes 2.0
Dzielenie jednostek Yes 7.0
Mapowanie funkcji skalarnych bazy danych Kiepsko 2.0
Mapowanie funkcji zwracającej wartość tabeli bazy danych Kiepsko 5.0
Mapowanie pól 1.1
Typy odwołań dopuszczane do wartości null (C# 8.0) 3.0
Graficzna wizualizacja modelu Yes Brak planowanej pomocy technicznej (1)
Edytor modeli graficznych Yes Brak planowanej pomocy technicznej (1)
Format modelu: EDMX (XML) Yes Brak planowanej pomocy technicznej (1)
Tworzenie modelu na podstawie bazy danych: Kreator programu VS Yes Brak planowanej pomocy technicznej (1)

Zapytania dotyczące danych

Funkcja EF6.4 EF Core
zapytania LINQ Yes 1.0
Wygenerowany język SQL z możliwością odczytu Kiepsko 1.0
Tłumaczenie funkcji GroupBy Yes 2.1
Ładowanie powiązanych danych: Natychmiastowe Yes 1.0
Ładowanie powiązanych danych: Ładowanie łapczywe dla typów pochodnych 2.1
Ładowanie powiązanych danych: Lazy loading Yes 2.1
Ładowanie powiązanych danych: jawne Yes 1.1
Nieprzetworzone zapytania SQL: typy jednostek Yes 1.0
Nieprzetworzone zapytania SQL: typy jednostek bez klucza Yes 2.1
Nieprzetworzone zapytania SQL: komponowanie za pomocą LINQ 1.0
Jawnie skompilowane zapytania Kiepsko 2.0
await foreach (C# 8.0) 3.0
Język zapytań oparty na tekście (Entity SQL) Yes Brak planowanej pomocy technicznej (1)

Zapisywanie danych

Funkcja EF6.4 EF Core
Śledzenie zmian: migawka Yes 1.0
Śledzenie zmian: powiadomienie Yes 1.0
Śledzenie zmian: serwery proxy Yes 5.0
Uzyskiwanie dostępu do śledzonego stanu Yes 1.0
Optymistyczna współbieżność Yes 1.0
Transakcje Yes 1.0
Grupowanie instrukcji 1.0
Mapowanie procedur składowanych Yes 7.0
Odłączone interfejsy API niskiego poziomu grafu Kiepsko 1.0
Rozłączony graf od końca do końca 1.0 (częściowe; #5536)

Inne funkcje

Funkcja EF6.4 EF Core
Migracje Yes 1.0
API do usuwania i tworzenia bazy danych Yes 1.0
Dane początkowe Yes 2.1
Odporność połączenia Yes 1.1
Przechwytywacze Yes 3.0
Events Yes 3.0 (częściowe; #626)
Proste rejestrowanie (Database.Log) Yes 5.0
Buforowanie DbContext 2.0

Dostawcy baz danych (2)

Funkcja EF6.4 EF Core
SQL Server Yes 1.0
MySQL Yes 1.0
PostgreSQL Yes 1.0
Oracle Yes 1.0
SQLite Yes 1.0
SQL Server Compact Yes 1.0 (3)
DB2 Yes 1.0
Firebird Yes 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 EF6 nie zostaną zaimplementowane w programie EF Core. Te funkcje zależą od bazowego modelu danych jednostki (EDM) i/lub są złożonymi funkcjami o stosunkowo niskim zwrotie z inwestycji. Zawsze z zadowoleniem przyjmujemy opinię, ale chociaż program EF Core umożliwia korzystanie z wielu rzeczy, które nie są możliwe w programie EF6, z drugiej strony nie jest możliwe, aby program EF Core obsługiwał wszystkie funkcje platformy EF6.

2 Dostawcy baz danych EF Core zaimplementowani przez inne firmy mogą być opóźnieni w aktualizacji do nowych głównych wersji programu EF Core. Aby uzyskać więcej informacji, zobacz Dostawcy baz danych .

3 Dostawcy programów SQL Server Compact i Jet pracują tylko na platformie .NET Framework (nie na platformie .NET Core).

Obsługiwane platformy

Program EF Core 3.1 działa na platformach .NET Core i .NET Framework przy użyciu platformy .NET Standard 2.0. Jednak program EF Core 5.0 nie działa w programie .NET Framework. Aby uzyskać więcej informacji, zobacz Platformy .

Program EF6.4 działa na platformach .NET Core i .NET Framework poprzez wielokrotne celowanie.

Wskazówki dotyczące nowych aplikacji

Użyj programu EF Core na platformie .NET Core dla wszystkich nowych aplikacji, chyba że aplikacja potrzebuje czegoś, co jest obsługiwane tylko na platformie .NET Framework.

Wskazówki dotyczące istniejących aplikacji EF6

EF Core nie jest zamiennikiem typu "drop-in" dla EF6. Przejście z platformy EF6 do platformy EF Core prawdopodobnie będzie wymagać zmian w aplikacji.

Podczas przenoszenia aplikacji EF6 do platformy .NET Core:

  • Kontynuuj korzystanie z programu EF6, jeśli kod dostępu do danych jest stabilny i prawdopodobnie nie będzie ewoluował lub potrzebuje nowych funkcji.
  • Port do programu EF Core, jeśli kod dostępu do danych ewoluuje lub jeśli aplikacja potrzebuje nowych funkcji dostępnych tylko w programie EF Core.
  • Przenoszenie do programu EF Core jest również często wykonywane na potrzeby wydajności. Jednak nie wszystkie scenariusze są szybsze, dlatego najpierw wykonaj pewne profilowanie.

Aby uzyskać więcej informacji, zobacz Przenoszenie z programu EF6 do programu EF Core .