Entity Framework Core 2.1 Preview 1 - Overview
A Microsoft lançou hoje, uma prévia Entity Framework Core 2.1.
Esses pacotes encontram-se disponíveis no NuGet, onde é possível instalar o pacote Microsoft.EntityFrameworkCore - v2.1.0-preview2-final, bem como os pacotes individuais dessa biblioteca.
Antes de realizar a instalação, é importante verificar qual o banco de dados o projeto em questão está utilizando.
Para os bancos de dados SQL Server, SQLite ou In-Memory, a instalação poderá ser feita diretamente pelo NuGet ou, então, pela linha de comando abaixo:
$ dotnet add package Microsoft.EntityFrameworkCore.SqlServer -V 2.1.0-preview1-final
Através NuGet:
Para outros provedores de dados relacionais - compatíveis com o EF Core 2.0, a instalação também está disponível no NuGet ou, então, pela linha de comando abaixo:
$ dotnet add package Microsoft.EntityFrameworkCore.Relational -V 2.1.0-preview1-final
Através NuGet:
Novas features
- Lazy loading: Através do EF Core é possível a construção de blocos necessários para qualquer pessoa autorizar classes de entidades que possam carregar suas propriedades de navegação sob demanda.
Um novo pacote foi criado para alavancar esses pacotes: Microsoft.EntityFrameworkCore.Proxies

- Parameters in entity constructors: Como um dos blocos de construção necessários para o carregamento lento, habilitamos a criação de entidades que tomam parâmetros em seus construtores.
É possível injetar valores de propriedades, lazy loading delegates e serviços.
- Value Conversions: As conversões de valores podem ser aplicadas para transformar os valores obtidos das colunas antes de serem aplicadas nas propriedades e vice-versa.
Há uma série de conversões que podem ser aplicadas por convenção, bem como uma API de configuração, que permite registrar conversões personalizadas entre colunas e propriedades. Algumas das aplicações deste recurso são:
- Armazenamento de enums e strings;
- Mapeamento de inteiros não assinados com o SQL Server;
- Criptografia e decodificação automática de valores de
propriedade;
- LINQ GroupBy translation: Antes da versão 2.1, no EF Core, o operador GroupBy LINQ era avaliado na memória. Agora há suporte a tradução para esse operador nos casos mais comuns.
No exemplo abaixo, a consulta utiliza a cláusula GroupBy para calcular várias funções agragadas:
var query = context.Orders
.GroupBy(o => new { o.CustomerId, o.EmployeeId })
.Select(g => new
{
g.Key.CustomerId,
g.Key.EmployeeId,
Sum = g.Sum(o => o.Amount),
Min = g.Min(o => o.Amount),
Max = g.Max(o => o.Amount),
Avg = g.Average(o => Amount)
});
Traduzindo para SQL, entende-se dessa forma:
SELECT[o].[CustomerId], [o].[EmployeeId],
SUM([o].[Amount]), MIN([o].[Amount]), MAX([o].[Amount]),
AVG([o].[Amount])
FROM [Orders] AS [o]
GROUP BY [o].[CustomerId], [o].[EmployeeId];
- Data Seeding: Nessa nova versão, será possível fornecer dados iniciais para preencher um banco de dados.
No exemplo abaixo, é possível configurar o data seed pra o Post in OnModelCreating:
modelBuilder.Entity<Post>().SeedData(new Post{ Id = 1, Text = "Hello World!" });
Para mais informações sobre Data Seeding, acesse esse link
- Query types: Agora o EF Core Model inclui a query types. Ao contrário dos tipos de entidade, os tipos de consulta não possuem chaves definidas neles e não podem ser inseridas, excluídas ou atualizadas (usada apenas para leitura), mas elas podem ser retornadas diretamente por consultadas.
Alguns dos cenários de uso para tipos de consulta são:
- Mapeamento para modos de exibição sem chaves primárias;
- Mapeamento para tabelas sem chaves primárias;
- Mapeamento para consultas definidas na model;
- Servindo como o tipo de retorno para consultas FromSQL().
- Include for derived types: Agora será possível especificar propriedades de navegação apenas definidas em tipos derivados ao escrever expressões para o método Include. Há suporte de referências dos nomes da propriedade de navegação definida em tipos derivados para o Include:
var option1 = context.People.Include(p => ((Student)p).School);
var option2 = context.People.Include(p => (p as Student).School);
var option3 = context.People.Include("School");
- System.Transactions support: É possível trabalhar com os recursos do System.Transactions, por exemplo: TransactionScope.
Funcionará para o .NET Framework quanto para o .NET Core, ao usar os provedores de banco de dados que o suportam.
- Better column ordering in initial migration: Atualização das migrações para inicialmente gerar colunas para tabelas na mesma ordem em que as propriedades são declaradas nas classes.
O EF Core não pode alterar a ordem quando novos membros são adicionados após a criação da tabela inicial.
- Optimization of correlated subqueries: Melhora na tradução de consultas para evitar a execução de consultas SQL "N + 1" em muitos cenários comuns em que o uso de uma propriedade de navegação leva a juntar dados da consulta raiz com dados de uma subconsulta correlacionada.
- OwnedAttribute: Agora é possível configurar os tipos de entidades da propriedade simplesmente anotando o tipo com [Owned] e depois validar que a entidade será adicionada na Model.O pacote responsável por essa definição é Microsoft.EntityFrameworkCore.Attributes, veja exemplo:
[Owned]
public class StreetAddress
{
public string Street { get; set; }
public string City { get; set; }
}
public class Order
{
public int Id { get; set; }
public StreetAddress ShippingAddress { get; set; }
}
Para maiores informações, acesse: Announcing Entity Framework Core 2.1 Preview 1
Até mais.