Upgrade na Entity Framework 6

V předchozích verzích EF byl kód rozdělený mezi základní knihovny (primárně System.Data.Entity.dll), které jsou součástí rozhraní .NET Framework a vzdálené knihovny (OOB) (primárně EntityFramework.dll), které jsou dodávány v balíčku NuGet. EF6 přebírá kód ze základních knihoven a integruje ho do knihoven OOB. To bylo nezbytné k tomu, aby ef mohl být opensourcový a aby se mohl vyvíjet jiným tempem než rozhraní .NET Framework. Důsledkem je, že aplikace bude nutné znovu vytvořit pro přesunuté typy.

To by mělo být jednoduché pro aplikace, které používají DbContext, jak je dodáváno v EF 4.1 a novějších. Pro aplikace, které používají ObjectContext, je potřeba trochu více práce, ale stále to není těžké.

Tady je kontrolní seznam věcí, které je potřeba udělat k upgradu existující aplikace na EF6.

1. Instalace balíčku NUGet EF6

Musíte upgradovat na nový modul runtime Entity Framework 6.

  1. Klikněte pravým tlačítkem na projekt a vyberte Spravovat balíčky NuGet...
  2. Na kartě Online vyberte EntityFramework a klikněte na Nainstalovat.

    Poznámka

    Pokud byla nainstalována předchozí verze balíčku NuGet EntityFramework, upgraduje se na EF6.

Případně můžete z konzoly Správce balíčků spustit následující příkaz:

Install-Package EntityFramework

2. Ujistěte se, že jsou odebrány odkazy na sestavení System.Data.Entity.dll.

Instalace balíčku NUGet EF6 by měla automaticky odebrat všechny odkazy na System.Data.Entity z projektu za vás.

3. Prohození všech modelů EF Designeru (EDMX) za účelem použití generování kódu EF 6.x

Pokud máte nějaké modely vytvořené pomocí EF Designeru, budete muset aktualizovat šablony generování kódu, aby se vygeneroval kód kompatibilní s EF6.

Poznámka

Pro Visual Studio 2012 a 2013 jsou aktuálně k dispozici pouze šablony EF 6.x DbContext Generator.

  1. Odstraňte existující šablony generování kódu. Tyto soubory se obvykle nazývají edmx_file_name.tt> a <edmx_file_name.Context.tt> a budou vnořené pod souborem edmx v Průzkumník řešení.< Šablony můžete vybrat v Průzkumník řešení a stisknutím klávesy Del je odstranit.

    Poznámka

    V projektech webu nebudou šablony vnořené pod vaším souborem edmx, ale uvedené vedle něj v Průzkumník řešení.

    Poznámka

    V VB.NET projektech budete muset povolit možnost Zobrazit všechny soubory, aby bylo možné zobrazit vnořené soubory šablony.

  2. Přidejte příslušnou šablonu generování kódu EF 6.x. Otevřete model v nástroji EF Designer, klikněte pravým tlačítkem na návrhovou plochu a vyberte Přidat položku generování kódu...

    • Pokud používáte rozhraní API DbContext (doporučeno), bude generátor EF 6.x DbContext k dispozici na kartě Data .

      Poznámka

      Pokud používáte Sadu Visual Studio 2012, budete muset nainstalovat nástroje EF 6, abyste měli tuto šablonu. Podrobnosti najdete v tématu Získání entity Frameworku .

    • Pokud používáte rozhraní API ObjectContext, budete muset vybrat kartu Online a vyhledat GENERÁTOR OBJEKTŮ EF 6.x EntityObject.

  3. Pokud jste na šablony generování kódu použili jakékoli vlastní nastavení, budete je muset znovu použít na aktualizované šablony.

4. Aktualizujte obory názvů pro všechny základní typy EF, které se používají.

Obory názvů pro DbContext a Code First se nezměnily. To znamená pro mnoho aplikací, které používají EF 4.1 nebo novější, nemusíte nic měnit.

Typy jako ObjectContext, které byly dříve v System.Data.Entity.dll byly přesunuty do nových oborů názvů. To znamená, že možná budete muset aktualizovat direktivy using nebo Import pro sestavení proti EF6.

Obecné pravidlo pro změny oboru názvů je, že jakýkoli typ v system.Data.* se přesune do System.Data.Entity.Core.*. Jinými slovy, stačí vložit Entity.Core. za System.Data. Příklad:

  • 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

Tyto typy jsou v základních oborech názvů, protože se nepoužívají přímo pro většinu aplikací založených na DbContext. Některé typy, které byly součástí System.Data.Entity.dll, se stále používají běžně a přímo pro aplikace založené na DbContext a proto nebyly přesunuty do základních oborů názvů. Jedná se o:

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

    Poznámka

    Tato třída byla přejmenována; třída se starým názvem stále existuje a funguje, ale nyní je označena jako zastaralá.

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

    Poznámka

    Tato třída byla přejmenována; třída se starým názvem stále existuje a funguje, ale nyní je označena jako zastaralá.)

  • Prostorové třídy (například DbGeography, DbGeometry) se přesunuly ze System.Data.Spatial => System.Data.Entita. Prostorové

Poznámka

Některé typy v oboru názvů System.Data jsou v System.Data.dll, což není sestavení EF. Tyto typy se nepřesunuly, takže jejich obory názvů zůstanou beze změny.