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
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.

Nenhum comentário:
Postar um comentário