Actualización de Entity Framework 5 a 6


Después de actualizar nuestro proyecto de usar Entity Framework 5 a Entity Framework 6 (aunque la función NuGets update) obtengo el siguiente error en mi clase de Entidades generadas:

Error 1 El tipo o nombre de espacio de nombres 'Objects' no existe en el Sistema de espacio de nombres'.Datos "
(¿falta una referencia de ensamblado?)

Entiendo que esto se debe a que el espacio de nombres ha cambiado y puedo corregir manualmente el error cambiando mis importaciones desde: using System.Data.Objects; y using System.Data.Objects.DataClasses; A: using System.Data.Entity.Core.Objects;

Sin embargo, el archivo se genera, así que necesito volver a aplicar esta corrección después de cada Update model from Database. ¿Hay algo extra que cambiar para que EF genere el modelo sin este error?

Author: Erik Philips, 2014-02-20

2 answers

Creo que su problema es, que sus plantillas T4, que generan las entidades y el contexto están todavía en EF versión 5.

Primero debe eliminar los elementos de generación de código actuales, que están en el código detrás del modelo, a saber, <Modelname>.Context.tt y <Modelname>.tt.A continuación, agregue un nuevo generador de código EF versión 6 con Right click in the model designer-> Add Code Generation Item ... -> EF 6.x DbContext Generator.

 62
Author: boindiil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-20 05:38:12

Esta es mi experiencia sobre cómo actualizar con éxito Entity Framework v5 a v6 para:

  • SQL Server.
  • C # y Visual Studio 2012.
  • Primero la base de datos.

Siglas:

  • EF5 = Entity Framework v5.
  • EF6 = Entity Framework v6.

Lista de verificación:

  1. EF5 está integrado en el núcleo de.NET 4.5, mientras que EF6 se ha desplazado y es de código abierto.
    • Esto significa que debe agregar los nuevos ensamblados EF6 a todos los proyectos relevantes en la solución, en particular el proyecto de entrada.
    • Esto significa que debe eliminar el sistema de ensamblaje.Entity from all projects, as this refers to EF5.
  2. EF5 tiene un único .dll " EntityFramework.dll", mientras que EF6 tiene dos .DLL:
    • EntityFramework
    • EntityFramework.SQLServer
  3. EF6 requiere cambios en la aplicación.config. La mejor manera de hacer estos cambios es hacer clic derecho en la Solución, seleccione "Manage NuGet Packages for Solution", busque" EntityFramework " e instale la versión 6.1.0 de Entity Framework en todos los proyectos relevantes, en particular en el proyecto de entrada. Asegúrese de desinstalar cualquier paquete de NuGet para el marco EF5 de todos los proyectos. Esto actualizará automáticamente tu aplicación.config archivos para que sean correctos.
  4. Examinar todas las aplicaciones.config archivos para referencias a EF5, y eliminarlos.
  5. Los espacios de nombres han cambiado:
    • Elimine las líneas de C# using System.Data.EntityClient;, que es un EF5 referencia.
    • Agregue la línea C# using System.Data.Entity.Core.EntityClient; que es la correcta para EF6.

Todavía atascado? Esta lista de verificación es un Wiki de la Comunidad, no dude en editar esta lista de verificación para ayudar a otras almas desafortunadas que todavía están golpeando sus cabezas contra la pared de ladrillo que puede ser la configuración EF6.

Actualización 2016-02-15

Explore otras opciones antes de considerar EF. Es 100 veces más lento que otras opciones, es enormemente complicado para lo que ofrece, la GUI de la entidad es lleno de errores y tiene extraños problemas de usabilidad, y vamos a tener que extraer todo nuestro código EF6 y reemplazarlo con algo que tarda menos de 5 minutos en hacer una consulta que tarda 5 segundos en Dapper.

 35
Author: Contango,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-12 09:45:23