Uaktualnianie do programu Entity Framework 6

W poprzednich wersjach programu EF kod został podzielony między biblioteki podstawowe (głównie System.Data.Entity.dll) dostarczane jako część bibliotek .NET Framework i poza pasmem (OOB) (głównie EntityFramework.dll) dostarczanych w pakiecie NuGet. Program EF6 pobiera kod z bibliotek podstawowych i dołącza go do bibliotek OOB. Było to konieczne, aby umożliwić programowi EF tworzenie oprogramowania open source i umożliwienie mu rozwoju w innym tempie niż .NET Framework. Konsekwencją tego jest to, że aplikacje będą musiały zostać ponownie skompilowane względem przeniesionych typów.

Powinno to być proste w przypadku aplikacji korzystających z elementu DbContext dostarczanego w programie EF 4.1 lub nowszym. W przypadku aplikacji korzystających z obiektu ObjectContext wymagana jest nieco więcej pracy, ale nadal nie jest to trudne do wykonania.

Oto lista kontrolna rzeczy, które należy wykonać, aby uaktualnić istniejącą aplikację do platformy EF6.

1. Instalowanie pakietu NuGet EF6

Musisz przeprowadzić uaktualnienie do nowego środowiska uruchomieniowego programu Entity Framework 6.

  1. Kliknij prawym przyciskiem myszy projekt i wybierz polecenie Zarządzaj pakietami NuGet...
  2. Na karcie Online wybierz pozycję EntityFramework i kliknij pozycję Zainstaluj

    Uwaga

    Jeśli zainstalowano poprzednią wersję pakietu NuGet EntityFramework, uaktualni go do platformy EF6.

Alternatywnie możesz uruchomić następujące polecenie z poziomu konsoli Menedżer pakietów:

Install-Package EntityFramework

2. Upewnij się, że odwołania do zestawu do biblioteki System.Data.Entity.dll zostały usunięte

Zainstalowanie pakietu NuGet EF6 powinno automatycznie usunąć wszystkie odwołania do elementu System.Data.Entity z projektu.

3. Zamień wszystkie modele EF Projektant (EDMX) na generowanie kodu EF 6.x

Jeśli masz jakiekolwiek modele utworzone przy użyciu platformy EF Projektant, musisz zaktualizować szablony generowania kodu w celu wygenerowania kodu zgodnego z platformą EF6.

Uwaga

Obecnie dostępne są tylko szablony generatora DBContext EF 6.x dla programu Visual Studio 2012 i 2013.

  1. Usuń istniejące szablony generowania kodu. Te pliki będą zwykle mieć nazwę edmx_file_name.tt> i <edmx_file_name.Context.tt> i będą zagnieżdżone w pliku edmx w Eksplorator rozwiązań.< Możesz wybrać szablony w Eksplorator rozwiązań i nacisnąć klawisz Del, aby je usunąć.

    Uwaga

    W projektach witryny sieci Web szablony nie będą zagnieżdżone w pliku edmx, ale wymienione obok niego w Eksplorator rozwiązań.

    Uwaga

    W projektach VB.NET należy włączyć opcję "Pokaż wszystkie pliki", aby wyświetlić zagnieżdżone pliki szablonów.

  2. Dodaj odpowiedni szablon generowania kodu EF 6.x. Otwórz model w Projektant EF, kliknij prawym przyciskiem myszy powierzchnię projektową i wybierz pozycję Dodaj element generowania kodu...

    • Jeśli używasz interfejsu API DbContext (zalecane), program EF 6.x DbContext Generator będzie dostępny na karcie Dane .

      Uwaga

      Jeśli używasz programu Visual Studio 2012, musisz zainstalować narzędzia EF 6, aby mieć ten szablon. Aby uzyskać szczegółowe informacje, zobacz Pobieranie programu Entity Framework .

    • Jeśli używasz interfejsu API ObjectContext, musisz wybrać kartę Online i wyszukać generator obiektów EntityObject EF 6.x.

  3. Jeśli zastosowano jakiekolwiek dostosowania do szablonów generowania kodu, należy ponownie zastosować je do zaktualizowanych szablonów.

4. Aktualizowanie przestrzeni nazw dla wszystkich używanych podstawowych typów ef

Przestrzenie nazw dla typów DbContext i Code First nie uległy zmianie. Oznacza to, że w przypadku wielu aplikacji korzystających z programu EF 4.1 lub nowszego nie trzeba nic zmieniać.

Typy, takie jak ObjectContext, które wcześniej znajdowały się w pliku System.Data.Entity.dll, zostały przeniesione do nowych przestrzeni nazw. Oznacza to, że może być konieczne zaktualizowanie dyrektyw using lub Import w celu skompilowania na platformie EF6.

Ogólna reguła dotycząca zmian przestrzeni nazw polega na tym, że dowolny typ w pliku System.Data.* został przeniesiony do pliku System.Data.Entity.Core.*. Innymi słowy, wystarczy wstawić element Entity.Core. po pliku System.Data. Przykład:

  • System.Data.EntityException => System.Data.Entity.Core. Entityexception
  • System.Data.Objects.ObjectContext => System.Data.Entity.Core. Objects.ObjectContext
  • System.Data.Objects.DataClasses.RelationshipManager => System.Data.Entity.Core. Objects.DataClasses.RelationshipManager

Te typy znajdują się w podstawowych przestrzeniach nazw, ponieważ nie są używane bezpośrednio w przypadku większości aplikacji opartych na protokole DbContext. Niektóre typy, które były częścią biblioteki System.Data.Entity.dll, są nadal używane często i bezpośrednio dla aplikacji opartych na protokole DbContext, dlatego nie zostały przeniesione do podstawowych przestrzeni nazw. Są to:

  • System.Data.EntityState => System.Data.Jednostka. Entitystate
  • System.Data.Objects.DataClasses.EdmFunctionAttribute => System.Data.Entity.DbFunctionAttribute

    Uwaga

    Nazwa tej klasy została zmieniona; klasa o starej nazwie nadal istnieje i działa, ale jest teraz oznaczona jako przestarzała.

  • System.Data.Objects.EntityFunctions => System.Data.Entity.DbFunctions

    Uwaga

    Nazwa tej klasy została zmieniona; klasa o starej nazwie nadal istnieje i działa, ale jest teraz oznaczona jako przestarzała.

  • Klasy przestrzenne (na przykład DbGeography, DbGeometry) zostały przeniesione z elementu System.Data.Spatial => System.Data.Data.Jednostka. Przestrzennej

Uwaga

Niektóre typy w przestrzeni nazw System.Data znajdują się w pliku System.Data.dll, który nie jest zestawem EF. Te typy nie zostały przeniesione, więc ich przestrzenie nazw pozostają niezmienione.