Comparar EF Core y EF6

EF Core

Entity Framework Core (EF Core) es un asignador de base de datos de objeto moderno para .NET. Admite consultas LINQ, seguimiento de cambios, actualizaciones y migraciones de esquemas.

EF Core funciona con SQL Server o SQL Azure, SQLite, Azure Cosmos DB, MySQL, PostgreSQL y muchas otras bases de datos a través de un modelo de complemento de proveedor de bases de datos.

EF6

Entity Framework 6 (EF6) es un asignador relacional de objetos diseñado para .NET Framework, pero compatible con .NET Core. EF6 es un producto estable y compatible, pero ya no se desarrolla activamente.

Comparación de características

EF Core ofrece nuevas características que no se implementarán en EF6. Sin embargo, no todas las características de EF6 están implementadas actualmente en EF Core.

En las tablas siguientes se comparan las características disponibles en EF Core y EF6. Se trata de una comparación general en la que no se muestran todas las características ni se explican las diferencias entre una misma característica en las distintas versiones de EF.

La columna EF Core indica la versión del producto en la que la característica apareció por primera vez.

Creación de un modelo

Característica EF6.4 EF Core
Asignación de clase básica 1.0
Constructores con parámetros 2.1
Conversiones de valores de propiedad 2.1
Tipos asignados sin claves 2.1
Convenciones 1.0
Convenciones personalizadas 1.0 (parcial; n.º 214)
Anotaciones de datos 1.0
API fluida 1.0
Herencia: tabla por jerarquía (TPH) 1.0
Herencia: tabla por tipo (TPT) Planeado para la versión 5.0 (n.º 2266)
Herencia: tabla por clase concreta (TPC) Stretch para la versión 5.0 (n.º 3170) (1)
Propiedades de estado reemplazadas 1.0
Claves alternativas 1.0
Navegaciones de varios a varios Planeado para la versión 5.0 (n.º 19003)
Varios a varios sin entidad de combinación En el trabajo pendiente (n.º 1368)
Generación de claves: base de datos 1.0
Generación de claves: cliente 1.0
Tipos complejos/de propiedad 2.0
Datos espaciales 2,2
Formato de modelo: código 1.0
Crear un modelo desde base de datos: línea de comandos 1.0
Actualizar modelo desde base de datos Parcial En el trabajo pendiente (n.º 831)
Filtros de consulta global 2.0
División de tablas 2.0
División de entidades Stretch para la versión 5.0 (n.º 620) (1)
Asignación de función escalar de base de datos Insuficiente 2.0
Asignación de campos 1,1
Tipos de referencia que aceptan valores NULL (C# 8.0) 3.0
Visualización gráfica de modelo No hay soporte técnico planeado (2)
Editor de modelo gráfico No hay soporte técnico planeado (2)
Formato de modelo: EDMX (XML) No hay soporte técnico planeado (2)
Crear un modelo desde base de datos: asistente de VS No hay soporte técnico planeado (2)

Consultar datos

Característica EF6.4 EF Core
Consultas LINQ 1.0
SQL generado legible Insuficiente 1.0
Traslación de GroupBy 2.1
Carga de datos relacionados: diligente 1.0
Carga de datos relacionados: carga diligente de tipo derivados 2.1
Carga de datos relacionados: diferida 2.1
Carga de datos relacionados: explícita 1,1
Consultas SQL sin formato: tipos de entidad 1.0
Consultas SQL sin formato: Tipos de entidad sin llave 2.1
Consultas SQL sin procesar: componer con LINQ 1.0
Consultas compiladas de manera explícita Insuficiente 2.0
await foreach (C# 8.0) 3.0
Lenguaje de consulta basado en texto (Entity SQL) No hay soporte técnico planeado (2)

Guardado de datos

Característica EF6.4 EF Core
Seguimiento de cambios: instantánea 1.0
Seguimiento de cambios: notificación 1.0
Seguimiento de cambios: servidores proxy Combinado para la versión 5.0 (n.º 10949)
Acceso al estado con seguimiento 1.0
Simultaneidad optimista 1.0
Transacciones 1.0
Procesamiento de instrucciones por lotes 1.0
Asignación de procedimientos almacenados En el trabajo pendiente (n.º 245)
Grafo desconectado: API de bajo nivel Insuficiente 1.0
Grafo desconectado: de un extremo a otro 1.0 (parcial; n.º 5536)

Otras características

Característica EF6.4 EF Core
Migraciones 1.0
API de creación o eliminación de la base de datos 1.0
Datos de inicialización 2.1
Resistencia de la conexión 1,1
Interceptores 3.0
Eventos 3.0 (parcial; n.º 626)
Registro simple (Database.Log) Combinado para la versión 5.0 (n.º 1199)
Agrupación de DbContext 2.0

Proveedores de bases de datos (3)

Característica EF6.4 EF Core
SQL Server 1.0
MySQL 1.0
PostgreSQL 1.0
Oracle 1.0
SQLite 1.0
SQL Server Compact 1.0 (4)
DB2 1.0
Firebird 2.0
Jet (Microsoft Access) 2.0 (4)
Azure Cosmos DB 3.0
En memoria (para pruebas) 1.0

1 Es probable que no se logren los objetivos de Stretch para una versión determinada. Sin embargo, si las cosas van bien, intentaremos lograrlos.

2 Algunas características de EF6 no se implementarán en EF Core. Estas características dependen del Entity Data Model (EDM) subyacente de EF6 o son características complejas con una rentabilidad de la inversión relativamente baja. Siempre agradecemos los comentarios, pero, aunque EF Core permite muchas cosas que no son posibles en EF6, no es factible que EF Core admita todas las características de EF6.

3 Es posible que los proveedores de bases de datos de EF Core implementados por terceros sufran un retraso en la actualización a las versiones principales de EF Core. Vea Proveedores de bases de datos para obtener más información.

4 Los proveedores de SQL Server Compact y Jet solo funcionan en .NET Framework (no en .NET Core).

Plataformas compatibles

EF Core 3.1 se ejecuta en .NET Core y .NET Framework a través del uso de .NET Standard 2.0. Sin embargo, EF Core 5.0 no se ejecutará en .NET Framework. Consulte Plataformas para obtener más información.

EF6.4 se ejecuta en .NET Core y .NET Framework a través de la compatibilidad con múltiples versiones.

Guía para las aplicaciones nuevas

Use EF Core en .NET Core para todas las aplicaciones nuevas a menos que la aplicación necesite algún elemento que solo se admita en .NET Framework.

Guía para las aplicaciones existentes de EF6

EF Core no es un reemplazo de EF6. Probablemente, cambiar de EF6 a EF Core requerirá cambios en la aplicación.

Al mover una aplicación de EF6 a .NET Core:

  • Siga usando EF6 si el código de acceso a datos es estable y no es probable que evolucione o necesite nuevas características.
  • Realice el traslado a EF Core si el código de acceso a datos evoluciona o si la aplicación necesita nuevas características que solo están disponibles en EF Core.
  • El traslado a EF Core también se realiza a menudo para obtener un mayor rendimiento. Sin embargo, no todos los escenarios son más rápidos, así que genere primero algunos perfiles.

Para más información, consulteTraslado de EF6 a EF Core.