Back-End

30 nov, 2017

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

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