Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Entity Framework Core o EF Core para abreviar es una reescritura total de Entity Framework para arquitecturas de aplicaciones modernas. Debido a los cambios fundamentales, no hay una ruta de actualización directa. El propósito de esta documentación es proporcionar una guía de un extremo a otro para migrar las aplicaciones de EF6 a EF Core.
Importante
Antes de iniciar el proceso de portabilidad, es importante validar que EF Core cumple los requisitos de acceso a datos de la aplicación. Puede encontrar todo lo que necesita en la documentación de EF Core.
Advertencia
EF Core solo admite .NET moderno y no admite .NET Framework. Por lo tanto, si el proyecto sigue teniendo como destino .NET Framework, tendrá que migrar a .NET moderno antes de poder iniciar la migración desde EF6 a EF Core. Tenga en cuenta que EF6 admite .NET moderno, por lo que puede migrar a .NET moderno primero mientras mantiene EF6 y, a continuación, abordar la migración de EF6 a EF Core.
Motivos para actualizar
Todo el desarrollo de Entity Framework nuevo está ocurriendo en EF Core. No hay planes de adaptar nuevas características a EF6. EF Core se ejecuta en los entornos de ejecución de .NET más recientes y aprovecha al máximo el tiempo de ejecución, específico de la plataforma (como ASP.NET Core o WPF) y características específicas del lenguaje. Estas son algunas de las ventajas que obtiene de la actualización:
- Aproveche las mejoras de rendimiento en curso en EF Core. Por ejemplo, un cliente que migró de EF6 a EF Core 6 vio una reducción de 40 veces en el uso de una consulta pesada debido a la característica de división de consultas. Muchos clientes notifican enormes mejoras de rendimiento simplemente pasando a la versión más reciente de EF Core.
- Utiliza nuevas características en EF Core. No habrá nuevas características agregadas a EF6. Todas las nuevas funcionalidades, por ejemplo, el proveedor de Azure Cosmos DB y
DbContextFactory
, solo se agregarán a EF Core. Para obtener una comparación completa de EF6 a EF Core, incluidas varias características exclusivas de EF Core, consulte : Comparación de EF Core y EF6. - Modernice la pila de aplicaciones mediante la inserción de dependencias e integre sin problemas el acceso a los datos con tecnologías como gRPC y GraphQL.
Una nota sobre las migraciones
En esta documentación se usan los términos port y upgrade para evitar confusiones con el término migraciones como una característica de EF Core. Las migraciones de EF Core no son compatibles con las migraciones de EF6 Code First debido a mejoras significativas en el modo en que se controlan las migraciones. No hay un enfoque recomendado para trasladar el historial de migraciones, por lo que se recomienda planificar comenzar de cero en EF Core. Puede mantener la base de código y los datos de las migraciones del EF6. Aplique la migración final en EF6 y cree una migración inicial en EF Core. Podrá realizar un seguimiento del historial en EF Core en el futuro.
Pasos de actualización
La ruta de actualización se ha dividido en varios documentos organizados por la fase de la actualización y el tipo de aplicación.
Determinación del tipo de EF Core
Hay varios enfoques sobre cómo funciona EF Core con el modelo de dominio y la implementación de la base de datos. En general, la mayoría de las aplicaciones seguirán uno de estos patrones, y el enfoque que aplique a su portabilidad dependerá del tipo de aplicación.
El código como origen de la verdad es un enfoque en el que todo se modela a través de código y clases, ya sea a través de atributos de datos, configuración fluida o una combinación de ambos. La base de datos se genera inicialmente en función del modelo definido en EF Core y normalmente se controlan las actualizaciones adicionales a través de migraciones. Este proceso se suele conocer como Code First (primero el código), pero el nombre no es completamente preciso, porque un enfoque consiste en empezar con una base de datos existente, generar las entidades y, después, mantenerla con código en el futuro.
La base de datos como fuente de verdad implica la ingeniería inversa o el andamiaje de tu código a partir de la base de datos. Cuando se realizan cambios de esquema, el código se vuelve a generar o actualiza para reflejar los cambios. Esto se suele denominar "base de datos primero".
Por último, un enfoque de asignación híbrida más avanzado sigue la filosofía de que el código y la base de datos se administran por separado, y EF Core se usa para asignar entre los dos. Este enfoque normalmente evita migraciones.
En la tabla siguiente se resumen algunas diferencias de alto nivel:
Enfoque | Rol de desarrollador | Rol de DBA | migrations | Andamiaje | repo |
---|---|---|---|---|---|
Código primero | Diseño de entidades y comprobación o personalización de migraciones generadas | Comprobación de las definiciones y cambios de esquema | Por confirmación | No disponible | Seguimiento de entidades, DbContext y migraciones |
Base de datos primero | Ingeniería inversa después de los cambios y comprobación de las entidades generadas | Notificación a los desarrolladores cuando la base de datos cambie para volver a crear el scaffolding | No disponible | Debido al cambio de esquema | Seguimiento de extensiones o clases parciales que extienden las entidades generadas |
Híbrido | Actualiza la configuración fluida para mapear cada vez que haya cambios en las entidades o en la base de datos. | Informe a los desarrolladores cuando la base de datos haya cambiado para que puedan actualizar las entidades y la configuración del modelo. | No disponible | No disponible | Seguimiento de entidades y DbContext |
El enfoque híbrido es un enfoque más avanzado con una sobrecarga adicional en comparación con los enfoques tradicionales de código y base de datos.
Comprender el impacto de alejarse de EDMX
EF6 admite un formato de definición de modelo especial denominado Entity Data Model XML (EDMX). Los archivos EDMX contienen varias definiciones, incluidas definiciones de esquema conceptual (CSDL), especificaciones de asignación (MSL) y definiciones de esquema de almacenamiento (SSDL). EF Core realiza un seguimiento de los esquemas de dominio, asignación y base de datos a través de gráficos de modelos internos y no admite el formato EDMX. Muchas entradas de blog y artículos declaran erróneamente esto significa que EF Core solo admite "código primero". EF Core admite los tres modelos de aplicación descritos en la sección anterior. Puede recompilar el modelo en EF Core mediante la ingeniería inversa de la base de datos. Si usa EDMX para una representación visual del modelo de entidad, considere la posibilidad de usar EF Core Power Tools de código abierto que proporcione funcionalidades similares para EF Core.
Para obtener más información sobre el impacto de la falta de compatibilidad con archivos EDMX, lea la guía sobre portabilidad de EDMX.
Realice los pasos de actualización.
No es un requisito portar toda la aplicación. EF6 y EF Core se pueden ejecutar en la misma aplicación (consulte: uso de EF Core y EF6 en la misma aplicación). Para minimizar el riesgo, puede considerar lo siguiente:
- Si aún no lo ha hecho, vaya a EF6 en .NET Core.
- Migre una pequeña parte de la aplicación a EF Core y ejecútelo en paralelo con EF6.
- Finalmente, lleve el resto del código base a EF Core y retire el código EF6.
En cuanto al propio puerto, a grandes rasgos, vas a hacer lo siguiente:
- Revise los cambios de comportamiento entre EF6 y EF Core.
- Realice las migraciones finales, si las hay, en EF6.
- Cree el proyecto de EF Core.
- Copie el código en el nuevo proyecto, ejecute ingeniería inversa o una combinación de ambos.
- Cambie el nombre de las referencias y entidades, y actualice los comportamientos.
-
System.Data.Entity
aMicrosoft.EntityFrameworkCore
- Cambio del constructor
DbContext
para consumir opciones o invalidarOnConfiguring
-
DbModelBuilder
aModelBuilder
- Cambie el nombre de
DbEntityEntry<T>
aEntityEntry<T>
- Pasar de APIs
Database.Log
a APIsMicrosoft.Extensions.Logging
(avanzadas) oDbContextOptionsBuilder.LogTo
(sencillas) - Aplicar cambios para
WithRequired
yWithOptional
(consulte aquí) - Actualizar el código de validación. No hay ninguna validación de datos integrada en EF Core, pero puede hacerlo usted mismo.
- Siga los pasos necesarios para migrar desde EDMX.
-
- Realice pasos específicos en función del enfoque de EF Core:
Hay muchas consideraciones relacionadas con todos los enfoques, por lo que también querrá revisar formas de abordar y solucionar las diferencias detalladas entre EF6 y EF Core.