Back-End

30 nov, 2017

Entity Framework Core 2.0: novidades e exemplos (SQL Server e PostgreSQL)

100 visualizações
Publicidade

Este artigo traz conteúdos que abordam as novidades do Entity Framework Core 2.0, além de apresentar exemplos de uso deste ORM em conjunto com tecnologias relacionais, como SQL Server e PostgreSQL.

Aproveito este artigo para deixar aqui também um convite. Entre os dias 04 e 13 de Dezembro/2017, acontecerá o DevWeek 2017, o evento de final de ano do Canal .NET voltado a desenvolvedores de software.

Serão 15 palestras noturnas, gratuitas e online ao longo de cinco dias, cobrindo diversas tecnologias e temas de destaque na área de software.

Para efetuar sua inscrição, acesse a página do evento no Facebook ou então o Meetup. A transmissão será via YouTube e a grade será divulgada em breve no site oficial do DevWeek 2017.

Conhecendo as novidades da versão 2.0

O Entity Framework Core 2.0 foi tema de um hangout recente do Canal .NET, no qual participei juntamente com o MVP André Secco. A gravação está disponível inclusive no YouTube:

Ao longo desta apresentação foram apresentados exemplos envolvendo as seguintes novidades:

  • Table Splitting;
  • Entity Type Configuration;
  • Owned Types;
  • Database Scalar Function Mapping;
  • Query Filters;
  • EF.Functions.Like();
  • DbContext Pooling;
  • Explicity Compiled Queries.

Os projetos demonstrados fazem uso do SQL Server e estão nos seguintes repositórios do GitHub:

Em outro hangout também recente do Canal .NET, foram discutidas as principais soluções de acesso a dados na plataforma .NET, com análises e exemplos envolvendo a utilização do Entity Framework, do NHibernate e do Dapper:

Utilizando o EF Core 2.0 com SQL Server

O package Microsoft.EntityFrameworkCore.SqlServer (já compatível com o .NET Standard 2.0) deverá ser adicionado a um projeto que faça uso de uma base SQL Server e do Entity Framework Core 2.0:

Quanto à string de conexão, a listagem a seguir traz um exemplo desta configuração no arquivo appsettings.json e que emprega Windows Authentication (parâmetro Integrated Security):

{
  "ConnectionStrings": {
    "BaseCotacoes": "Data Source=.\\MSSQLSERVER2016;Initial Catalog=ExemplosEFCore2;Integrated Security=SSPI;"
  },
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  }
}

Outra alternativa seria o modo SQL Server Authentication (incluindo usuário + senha de acesso ao banco – parâmetros User Id e Password), conforme demonstrado no próximo exemplo:

{
  "ConnectionStrings": {
    "BaseCotacoes": "Data Source=.\\MSSQLSERVER2016;Initial Catalog=ExemplosEFCore2;User ID=SA;Password=DockerSql2017!;"
  },
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  }
}

A classe Startup também passará por ajustes. O método AddEntityFrameworkSqlServer (namespace Microsoft.Extensions.DependencyInjection) será acionado em ConfigureServices, informando-se ao objeto options à string de conexão definida no arquivo appsettings.json:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;

namespace ExemploTableSplitting
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddEntityFrameworkSqlServer()
                .AddDbContext<ExemploContext>(
                    options => options.UseSqlServer(
                        Configuration.GetConnectionString("BaseCotacoes")));

            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();
        }
    }
}

Utilizando o EF Core 2.0 com PostgreSQL

Para uso do PostgreSQL em um projeto que dependa do Entity Framework Core 2.0, será necessário adicionar o package Npgsql.EntityFrameworkCore.PostgreSQL (que também já possui compatibilidade com o .NET Standard 2.0):

A próxima listagem traz um exemplo de string de conexão utilizando uma base do PostgreSQL:

{
  "ConnectionStrings": {
    "BaseCotacoes": "Server=localhost;Database=ExemplosEFCore2;Port=5432;User Id=postgres;Password=PostgreSQL2017!;"
  },
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  }
}

Quanto à classe Startup, o método AddEntityFrameworkNpgsql (namespace Microsoft.Extensions.DependencyInjection) será invocado em ConfigureServices. Isto acontecerá de maneira similar ao processo envolvendo o SQL Server e utilizando a string de conexão informada no arquivo appsettings.json:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;

namespace ExemploTableSplitting
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddEntityFrameworkNpgsql()
                .AddDbContext<ExemploContext>(
                    options => options.UseNpgsql(
                        Configuration.GetConnectionString("BaseCotacoes")));

            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();
        }
    }
}

Diversos exemplos de utilização do PostgreSQL com o Entity Framework Core 2.0 podem ser encontrados no seguinte repositório:

Referências