Anunciamos Entity Framework Core 2.0

Lanzamos la versión final de Entity Framework Core 2.0, junto con .NET Core 2.0 y ASP.NET Core 2.0.

Entity Framework (EF) Core es la versión ligera, extensible y multi-plataforma de Entity Framework, el popular marco de trabajo Objeto/Mapeo Relacional (O/RM por sus siglas en inglés), de .NET.

Obtener los bits

Pueden comenzar ya a utilizar EF Core 2.0 con la instalación de un paquete NuGet de proveedor de base de datos compatible con EF Core 2.0. Por ejemplo, para instalar el proveedor SQL Server desde la línea de comando en una aplicación .NET Core 2.0:

$ dotnet add package Microsoft.EntityFrameworkCore.SqlServer -V 2.0.0

O desde Package Manager Console en Visual Studio 2017:

PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 2.0.0

Noten que SQL Server, SQLite y los proveedores de base de datos en memoria para EF Core 2.0 ya se encuentran incluidos en el meta-paquete ASP.NET Core 2.0. Por lo tanto, si crean una aplicación ASP.NET Core 2.0, estos pasos no serán necesarios.

Revisen nuestra documentación para una instalación más detallada y para instrucciones de actualización, así como tutoriales sobre cómo utilizar EF Cora con diferentes tipos de aplicaciones.

Lo nuevo en esta versión

A continuación, algunas de las nuevas características que más resaltan en EF Core 2.0:

.NET Standard 2.0

EF Core ahora apunta hacia el nuevo .NET Standard 2.0. Éste define un área de superficie compartida de más de 32 mil API que trabajan a través .NET Framework, .NET Core, Mono, Xamarin y pronto, en Universal Windows Platform. Con .NET Standard 2.0, los desarrolladores pueden reutilizar sus códigos y habilidades en un amplio rango de plataformas, tipos de aplicaciones y dispositivos.

Vean nuestra documentación de soporte de plataforma para una guía detallada sobre cómo utilizar EF Core 2.0 en cada plataforma

Traducción LINQ mejorada

Las solicitudes son más eficientes en EF Core 2.0 en múltiples escenarios. Como ejemplo, hemos incrementado el número de patrones que pueden ser traducidos a SQL, por lo que muchas solicitudes que lanzaron la evaluación por parte del cliente en versiones previas, ya no lo harán en 2.0.

Operador Like de solicitudes

Ahora pueden utilizar EF.Functions.Like() en una solicitud LINQ y será traducida a LIKE en SQL o evaluada en memoria de ser necesario. Tomen como ejemplo la siguiente solicitud:

var customers =
    from c in context.Customers
    where EF.Functions.Like(c.Name, "a%");
    select c;

Que es traducida así:

SELECT [c].[Id], [c].[Name]
FROM [Customers] AS [c]
WHERE [c].[Name] LIKE N'a%';

Entidades propias y División de Tablas

Ahora pueden definir entidades “propias” o “pequeñas” que agrupan propiedades dentro de otras entidades, algo muy similar a cómo trabajaban en EF6 tipos complejos, pero con la capacidad de contener propiedades de navegación de referencia. En combinación con la división de tabla, los tipos propias permiten a estas dos entidades ser mapeadas de manera automática a una sólo mesa de cliente:

public class Customer
 {

public int Id { get; set; }
 public string Name {get; set;}
 public PhysicalAddress Address { get; set; }

}

public class PhysicalAddress
 {

public string StreetAddress { get; set; }
 public Location Location { get; set; }

}

...

modelBuilder.Entity<Customer>()

.OwnsOne(c => c.Address);

Filtros globales de solicitudes

Ahora pueden especificar filtros en el modelo, que son aplicados de manera automática a todas las entidades de un tipo en todas las solicitudes ejecutadas en DbContext. Por ejemplo este código en OnModelCreating:

modelBuilder.Entity<Post>()
 .HasQueryFilter(p => !p.IsDeleted);

Esta solicitud solo regresará posteos que no están marcados como eliminados:

var blog = context.Blogs
       .Include(b => b.Posts)
       .FirstOrDefault(b => b.Id == id);

Agrupamiento DbContext

Muchas aplicaciones ASP.NET Core ahora pueden obtener un impulso de desempeño al configurar el registro del servicio de sus tipos de DbContext para utilizar una agrupación de instancias pre-creadas, y evadir el costo de crear una nueva instancia para cada solicitud:

services.AddDbContextPool<BloggingContext>(
       options => options.UseSqlServer(connectionString));

Interpolación de cuerda en métodos simples SQL

La siguiente solicitud SQL que utiliza una sintaxis C# de interpolación de cuerda ahora se vuelve parametrizada de manera correcta:

var city = "Redmond";

using (var context = CreateContext())
 {

context.Customers.FromSql([email protected]"
        SELECT *
        FROM Customers
        WHERE City = {city}");

}

Esto creará un parámetro @p0 con un valor de ‘Redmond’ y un SQL que se ve así:

SELECT *
FROM Customers
WHERE City = @p0

Y más

Hemos agregado algunas otras características como solicitudes compiladas de manera explícita, configuraciones de entidad auto-contenidas en primer código y mapeo de función escalar de base de datos (¡Gracias a Paul Middleton por su gran contribución!), y hemos solucionado varios bugs.

Por favor revisen el resumen de las nuevas características en nuestra documentación.

Siguientes pasos

Ya hemos comenzado con el arduo trabajo de la siguiente versión de EF Core y también estamos por terminar EF 6.2.

¡Sus contribuciones siempre son bienvenidas!