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: