c# - migrations - entity framework mvc 5
ActualizaciĆ³n desde Entity Framework 5 a 6 (2)
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.
En primer lugar, debe eliminar los elementos de generación de código actuales, que se encuentran en el código subyacente del modelo, a saber, <Modelname>.Context.tt
y <Modelname>.tt
.Next añada un nuevo generador de código EF versión 6 con el Right click in the model designer-> Add Code Generation Item ... -> EF 6.x DbContext Generator
.
Después de actualizar nuestro proyecto de usar Entity Framework 5 a Entity Framework 6 (a través de la función de actualización de NuGets), recibo el siguiente error en mi clase Entities generada:
Error 1 El tipo o el nombre del espacio de nombres ''Objetos'' no existe en el espacio de nombres ''System.Data''
(¿Echas de menos una referencia de montaje?)
Entiendo que esto se debe a que el espacio de nombres ha cambiado y puedo corregir el error manualmente al cambiar mis importaciones desde: using System.Data.Objects;
y el using System.Data.Objects.DataClasses;
Para: using System.Data.Entity.Core.Objects;
Sin embargo, el archivo se genera, así que tengo que volver a aplicar esta corrección después de cada Update model from Database
. ¿Hay algo más que cambiar para que EF genere el modelo sin este error?
Esta es mi experiencia sobre cómo actualizar con éxito Entity Framework v5 a v6 para:
- Servidor SQL.
- C # y Visual Studio 2012.
- Base de datos primero
Acrónimos:
- EF5 = Entity Framework v5.
- EF6 = Entity Framework v6.
Lista de verificación:
- 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 conjuntos de EF6 a todos los proyectos relevantes en la solución, en particular, el proyecto de entrada.
- Esto significa que debe eliminar el ensamblado System.Entity de todos los proyectos, ya que esto se refiere a EF5.
- EF5 tiene un solo .dll "EntityFramework.dll", mientras que EF6 tiene dos .dlls:
- Marco de la entidad
- EntityFramework.SqlServer
- EF6 requiere cambios a app.config. La mejor manera de hacer estos cambios es hacer clic derecho en la Solución, seleccionar "Gestionar Paquetes NuGet para Solución", buscar "EntityFramework" e instalar v6.1.0 de Entity Framework en todos los proyectos relevantes, en particular en el proyecto de entrada. Asegúrese de desinstalar cualquier paquete NuGet para EF5 Framework de todos los proyectos. Esto actualizará automáticamente sus archivos app.config para que sean correctos.
- Examine todos los archivos app.config para referencias a EF5 y elimínelos.
- Los espacios de nombres han cambiado:
- Elimine las líneas C #
using System.Data.EntityClient;
, que es una referencia EF5. - Agregue la línea C #
using System.Data.Entity.Core.EntityClient;
cuál es el correcto para EF6.
- Elimine las líneas C #
¿Todavía estancado? Esta lista de verificación es una Wiki de la comunidad, siéntete libre de editar esta lista de verificación para ayudar a otras almas desventuradas que todavía están golpeando sus cabezas contra la pared de ladrillo que puede tener la configuración EF6.
Actualización 2016-02-15
Por favor explore otras opciones antes de considerar EF. Es 100 veces más lento que otras opciones, es enormemente complicado para lo que ofrece, la entidad GUI está llena de errores y tiene extraños problemas de usabilidad, y vamos a tener que arrancar todo nuestro código EF6 y reemplazarlo por algo que tome menos de 5 minutos para realizar una consulta que demora 5 segundos en Dapper.