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.