terça-feira, 27 de fevereiro de 2018

Entity Framework Core 2.1 Preview 1 - Overview


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.

Nenhum comentário:

Postar um comentário