Como conectar ao PostgreSQL no Entity Framework

Neste conteúdo você aprenderá a utilizar o Entity Framework em conjunto com o banco de dados PostgreSQL. Para isso veremos quais pacotes devem ser instalados e configurações que precisam ser feitas no projeto.

O Entity Framework é um framework de Mapeamento Objeto-Relacional (ORM) capaz de trabalhar com diversos bancos de dados. Isso é possível graças à sua estrutura interna, que usa o ADO.NET, um conjunto de classes e interfaces para acesso a bancos de dados em .NET, como ilustra a Figura 1.

Figura 1. Estrutura de funcionamento do Entity Framework

Para trabalhar um determinado banco o EF usa o provider adequado, que implementa as interfaces do ADO.NET, como mostra a Figura 2.

Figura 2. Providers do ADO.NET

Graças a essa estrutura podemos trabalhar com diferentes SGBDs alterando basicamente o provider utilizado, pois o Entity Framework abstrai toda a complexidade da decisão sobre quais classes utilizar para cada banco.

Ir para o código

Instalando o Entity Framework

Para trabalhar com o PostgreSQL precisamos instalar o pacote EntityFramework6.Npgsql via NuGet. Automaticamente serão instaladas duas dependências: o próprio EntityFramework e o Npgsql que é o provider do ADO.NET para PostgreSQL, como ilustra a sequência de imagens a seguir:

#PraCegoVer - Transcrição dos Slides 1º Slide: Clicamos com o botão direito do mouse no projeto e selecionamos a opção "Manage Nuget Packges".

2º Slide: No campo de pesquisa digitamos EntityFramework6.Npgsql, assim o selecionamos e clicamos em install.

3º Slide: É exibido que a instalação foi concluida com êxito.

Configurando o acesso ao banco

Após instalar os pacotes necessários precisamos registrar no arquivo de configurações da aplicação (App.config ou Web.config) o DbProviderFactory referente ao uso do PostgreSQL. Esse é um elemento próprio da arquitetura do EF que implementa o padrão de projeto Abstract Factory e indica quais classes devem ser usadas para acesso ao banco de dados:

<system.data> <DbProviderFactories> <add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql" support="FF" /> </DbProviderFactories> </system.data>

Por fim podemos definir a string de conexão seguindo os padrões do PostgreSQL:

<connectionStrings> <add name="PgProdutos" connectionString="server=localhost;Port=5432;user id=postgres; password=abcd1234;database=DbProdutos" providerName="Npgsql" /> </connectionStrings>

A partir daí o uso do Entity Framework é igual para todos os bancos. Ou seja, podemos usar a classes DbContext, DbSet, Data Annotations, etc. Por exemplo, o DbContext para essa aplicação deve referenciar a string de conexão:

public class ProdutosContext:DbContext { public ProdutosContext():base("PgProdutos") { } public DbSet<Produto> Produtos { get; set; } }

Ao ler ou escrever dados na coleção Produtos a tabela será criada no banco, caso não exista.

Artigos relacionados