Actualización a Entity Framework 6

En versiones anteriores de EF, el código se dividió entre las bibliotecas principales (principalmente System.Data.Entity.dll) enviadas como parte de .NET Framework y las bibliotecas fuera de banda (OOB) (principalmente EntityFramework.dll) enviadas en un paquete NuGet. EF6 toma el código de las bibliotecas principales e lo incorpora en las bibliotecas OOB. Esto era necesario para que EF fuera de código abierto y para que pudiera evolucionar a un ritmo diferente al de .NET Framework. La consecuencia de esto es que las aplicaciones tendrán que volverse a compilar con los tipos trasladados.

Esto debería ser sencillo para las aplicaciones que usan DbContext que viene con EF 4.1 y versiones posteriores. Se requiere un poco más de trabajo para las aplicaciones que hacen uso de ObjectContext, pero aún así no es difícil de hacer.

Esta es una lista de comprobación de las cosas que debe hacer para actualizar una aplicación existente a EF6.

1. Instalar el paquete NuGet de EF6

Debe actualizar al nuevo entorno de ejecución de Entity Framework 6.

  1. Haga clic con el botón derecho en Administrar paquetes NuGet...
  2. En la pestaña En línea, seleccione EntityFramework y haga clic en Instalar

    Nota:

    Si se instaló una versión anterior del paquete EntityFramework NuGet, se actualizará a EF6.

Como alternativa, puede ejecutar el siguiente comando desde la consola del administrador de paquetes:

Install-Package EntityFramework

2. Asegurarse de que se quitan las referencias de ensamblado a System.Data.Entity.dll

La instalación del paquete NuGet de EF6 debería quitar automáticamente las referencias a System.Data.Entity del proyecto.

3. Intercambiar modelos de EF Designer (EDMX) para usar la generación de código EF 6.x

Si tiene algún modelo creado con EF Designer, deberá actualizar las plantillas de generación de código para generar código compatible con EF6.

Nota:

Actualmente solo hay plantillas del generador EF 6.x DbContext disponibles para Visual Studio 2012 y 2013.

  1. Eliminar las plantillas de generación de código existentes. Normalmente, estos archivos se denominarán <edmx_file_name.tt> y <edmx_file_name.Context.tt> y se anidarán en el archivo edmx en el Explorador de soluciones. Puede seleccionar las plantillas en el Explorador de soluciones y presionar la tecla Supr para eliminarlas.

    Nota:

    En los proyectos de sitio web, las plantillas no se anidarán en el archivo edmx, pero se mostrarán junto a ellas en el Explorador de soluciones.

    Nota:

    En proyectos VB.NET deberá habilitar "Mostrar todos los archivos" para poder ver los archivos de plantilla anidados.

  2. Agregar la plantilla de generación de código EF 6.x adecuada. Abra el modelo en EF Designer, haga clic con el botón derecho en la superficie de diseño y seleccione Agregar elemento de generación de código...

    • Si usa la API DbContext (recomendado), Generador de EF 6.x DbContext estará disponible en la pestaña Datos.

      Nota:

      Si usa Visual Studio 2012, deberá instalar las herramientas de EF 6 para tener esta plantilla. Consulte Obtener Entity Framework para obtener más información.

    • Si usa la API ObjectContext, deberá seleccionar la pestaña En línea y buscar Generador de EF 6.x EntityObject.

  3. Si ha aplicado personalizaciones a las plantillas de generación de código, deberá volver a aplicarlas a las plantillas actualizadas.

4. Actualizar espacios de nombres para los tipos principales de EF que se usan

Los espacios de nombres para los tipos DbContext y Code First no han cambiado. Esto significa que para muchas aplicaciones que usan EF 4.1 o posterior no necesitará cambiar nada.

Los tipos como ObjectContext que se encontraban anteriormente en System.Data.Entity.dll se han movido a nuevos espacios de nombres. Esto significa que es posible que tenga que actualizar las directivas using o Import para compilarlas en EF6.

La regla general para los cambios en el espacio de nombres es que cualquier tipo de System.Data.* se mueve a System.Data.Entity.Core.*. En otras palabras, simplemente inserte Entity.Core. después de System.Data. Por ejemplo:

  • 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

Estos tipos están en los espacios de nombres Core porque no se usan directamente para la mayoría de las aplicaciones basadas en DbContext. Algunos tipos que formaban parte de System.Data.Entity.dll todavía se usan habitualmente y directamente para las aplicaciones basadas en DbContext, por lo que no se han movido a los espacios de nombres Core. Estos son:

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

    Nota:

    Se ha cambiado el nombre de esta clase; una clase con el nombre anterior sigue existiendo y funciona, pero ahora está marcada como obsoleta.

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

    Nota:

    Se ha cambiado el nombre de esta clase; una clase con el nombre anterior sigue existiendo y funciona, pero ahora está marcada como obsoleta).

  • Las clases espaciales (por ejemplo, DbGeography, DbGeometry) se han movido de System.Data.Spatial => System.Data.Entity.Spatial

Nota:

Algunos tipos del espacio de nombres System.Data están en System.Data.dll, que no es un ensamblado EF. Estos tipos no se han movido y, por tanto, sus espacios de nombres permanecen sin cambios.