Entity Framework 6 - Acessando o PostgreSQL - I (VB .NET)


 Neste artigo vamos acessar um banco de dados PostgreSQL usando os recursos do Entity Framework 6 usando a linguagem VB .NET.

Já estamos na versão 6.1 do Entity Framework e muita coisa evoluiu desde a sua primeira versão.

O Entity Framework é uma ferramenta OR/M que realiza o mapeamento objeto relacional gerando entidades e mapeando-as para as tabelas do banco de dados.

Para você se situar, na tabela a seguir temos uma apresentação de cada versão do EF e seus principais recursos:

Versão Principais Recursos
EF 3.5 Suporte a O/RM básico com a abordagem Database First.
EF 4.0 Suporte a POCO, Lazy loading, melhoria na testabilidade, geração de código customizada e a abordagem Model First.
EF 4.1 Disponibilizado também via pacote NuGet, API DBContext Simplificada ao invés de ObjectContext, abordagem Code First. (Correção de bugs com a versão EF 4.1.1) 
EF 4.3 Recurso Code First Migrations que permite que um banco de dados criado via Code First ser gradativamente alterado conforme o modelo Code First evoluir. Liberação da versão EF 4.3.1 para correção de bugs do EF 4.3.
EF 5.0 Anunciado EF como Open Source. Apoio a Enum Introduzido, funções com valor de tabela, tipos de dados espaciais, vários diagramas por modelo, coloração de formas na superfície de projeto e importação de lote de procedimentos armazenados, EF Power Tools e várias melhorias de desempenho.
EF 6.0/6.1 Inclui muitos novos recursos relacionadas ao Code-First e ao descritor EF como consulta e persistência assíncrona, resilência da resolução de dependências, etc

Mas não se assuste, o Entity Framework 6.0 é uma evolução, e tudo o que você já aprendeu e já conhece sobre o Entity Framework não esta perdido pois ele permanece o mesmo não havendo uma mudança radical no seu funcionamento mas apenas em alguns recursos.

Veja o site oficial do Entity Framework no Nuget : http://www.nuget.org/packages/EntityFramework

Recursos usados

Objetivos

Aprendizado

Criando o projeto no VS 2013

Abra o Visual Studio 2013 Express for Windows desktop e clique em New Project;

Selecione o template Visual Basic -> Windows Forms Application e informe o nome EF6_CursoBasico e clique no botão OK;

Vamos criar nosso modelo de entidades usando classes POCO. Nosso modelo de entidades irá conter as classes Artista e Album.

No menu PROJECT -> Add Class;

Informe o nome Album.vb e a seguir digite o código abaixo neste arquivo:

Public Class Album
    Public Property AlbumId As Integer
    Public Property Titulo As String
    Public Property ArtistaId As Integer
    Public Property Artista As Artista

End Class

No menu PROJECT -> Add Class;

Informe o nome Artista.vb e a seguir digite o código abaixo neste arquivo:

Public Class Artista
    Public Property ArtistaId As Integer
    Public Property Nome As String
    Sub New()
        Albuns = New List(Of Album)
    End Sub
    Public Overridable Property Albuns() As ICollection(Of Album)
End Class

Observe que a entidade Artista possui uma associação com multiplicidade um-para-muitos com a entidade Album.

Antes de prosseguirmos e criar a nossa classe de Contexto vamos incluir no projeto referências ao Entity Framework e ao provider Npgsql usado com o PostgreSQL

Na janela Solution Explorer clique com o botão direito do mouse sobre o projeto EF6_PostgreSQL e a seguir clique em Manage Nuget Packages.

A seguir clique na guia Online e na caixa de pesquisa digite EntityFramework;

Localize o pacote para o EntityFramework e clique no botão Install, confirmando e aceitando a instalação;

Repita o procedimento acima desta vez para o pacote referente ao provedor Npgsql conforme mostrado abaixo:

Após instalar o provider Npgsql vamos registrar o mesmo no arquivo app.Config incluindo o seguinte trecho de código neste arquivo:

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

Agora já podemos criar a nossa classe de contexto.

No menu PROJECT -> Add Class;

Informe o nome ArteContexto.vb e a seguir digite o código abaixo neste arquivo:

Imports System.Data.Entity
Imports System.Data.Entity.ModelConfiguration.Conventions
Public Class ArteContexto
    Inherits DbContext
    Public Property Artistas() As DbSet(Of Artista)
    Public Property Albuns() As DbSet(Of Album)
    Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)
        ' Mapeamento para as tabelas do banco de dados
        modelBuilder.Entity(Of Artista)().ToTable("Artista", "public")
        modelBuilder.Entity(Of Album)().ToTable("Album", "public")
        ' O banco de dados Macoratti PostgreSQL não auto-incrementa os Ids
        modelBuilder.Conventions.Remove(Of StoreGeneratedIdentityKeyConvention)()
    End Sub
End Class

Infelizmente o provider Npgsql não permite a criação de banco de dados e por isso não poderemos usar os recursos do Code-First e vamos ter que criar o banco de dados e as tabelas usando o pgAdmin III 1.18.1.

Criando o banco de dados e as tabelas no PostgreSQL usando o pgAdmin III

Para criar o banco de dados e as tabelas vamos usar o pgAdmin III. Para isso você tem que estar com o banco de dados PostGreSQL instalado.

Saiba que o PostGreSQL é um banco de dados totalmente gratuito e com uma boa documentação e desempenho e que pode ser considerado para ser usado em aplicações comerciais. A versão que eu vou usar neste artigo é a versão PostGreSQL 9.3.

Vamos precisar de uma ferramenta para administrar o PostGreSQL e eu vou usar o pgAdmin III que já é instalada quando você instalada o PostGreSQL. A versão que temos instalada do pgAdmin III é a 1.18.1.

O processo de instalação é simples bastando seguir o roteiro padrão e informar a senha para o usuário do banco de dados.

Eu não vou entrar em detalhes sobre como criar o banco de dados e as tabelas no PostGreSQL para saber mais consulte o artigo: C# - PostGreSQL - CRUD Básico - I

Após executar e se locar no pgAdmin III você verá seguinte janela :

Em objeto browser temos os seguintes itens:

Se você clicar em (+) da opção Databases verá que já existe um banco de dados definido como Postgresql que foi criado automaticamente na instalação. Esse banco de dados não será utilizado e não pode ser excluído por se tratar de um banco utilizado para administração do Postgresql.

Vamos criar nosso banco de dados. Clique com o botão direito do rato em cima de Databases e escolha a opção New Database:

Na janela New DataBase informe o nome do banco de dados - Macoratti e define o Owner como sendo o usuário postgres:

Os objetos do nosso banco de dados podem ser vistos clicando em (+) Schemas e a seguir em public;

Veremos uma lista contendo objetos do banco de dados :

Dentre esses objetos vamos descrever resumidamente os mais usados:

Note que já temos as tabelas Album e Artista criadas no banco de dados. Uma forma mais fácil e direta de criar uma tabela é usar o Editor SQL, inserir o comando SQL para criar a tabela e executar o script. A seguir temos os scripts usados para crias as tabelas no editor SQL:

1- tabela Album

2- tabela Artista

Também podemos usar o Editor SQL do pgAdmin para incluir dados nas tabelas Artista e Album:

a- Comando SQL para incluir dados na tabela Artista

INSERT INTO "Artista" ("ArtistaId", "Name") VALUES (1, N'AC/DC');
INSERT INTO "Artista" ("ArtistaId", "Name") VALUES (2, N'Accept');
INSERT INTO "Artista" ("ArtistaId", "Name") VALUES (3, N'Aerosmith');
INSERT INTO "Artista" ("ArtistaId", "Name") VALUES (4, N'Alanis Morissette');
INSERT INTO "Artista" ("ArtistaId", "Name") VALUES (5, N'Alice In Chains');
INSERT INTO "Artista" ("ArtistaId", "Name") VALUES (6, N'Antônio Carlos Jobim');
INSERT INTO "Artista" ("ArtistaId", "Name") VALUES (7, N'Apocalyptica');
INSERT INTO "Artista" ("ArtistaId", "Name") VALUES (8, N'Audioslave');
...

b- Comando SQL para incluir dados na tabela Album

INSERT INTO "Album" ("AlbumId", "Titulo", "ArtistaId") VALUES (1, N'For Those About To Rock We Salute You', 1);
INSERT INTO "Album" ("AlbumId", "Titulo", "ArtistaId") VALUES (2, N'Balls to the Wall', 2);
INSERT INTO "Album" ("AlbumId", "Titulo", "ArtistaId") VALUES (3, N'Restless and Wild', 2);
INSERT INTO "Album" ("AlbumId", "Titulo", "ArtistaId") VALUES (4, N'Let There Be Rock', 1);
INSERT INTO "Album" ("AlbumId", "Titulo", "ArtistaId") VALUES (5, N'Big Ones', 3);
INSERT INTO "Album" ("AlbumId", "Titulo", "ArtistaId") VALUES (6, N'Jagged Little Pill', 4);
INSERT INTO "Album" ("AlbumId", "Titulo", "ArtistaId") VALUES (7, N'Facelift', 5);
INSERT INTO "Album" ("AlbumId", "Titulo", "ArtistaId") VALUES (8, N'Warner 25 Anos', 6);
INSERT INTO "Album" ("AlbumId", "Titulo", "ArtistaId") VALUES (9, N'Plays Metallica By Four Cellos', 7);
INSERT INTO "Album" ("AlbumId", "Titulo", "ArtistaId") VALUES (10, N'Audioslave', 8);
...

Após criar o banco de dados e as tabelas vamos salvar a string de conexão com o banco de dados no arquivo App.Config incluindo o código abaixo neste arquivo:

<connectionStrings>
    <add name="ArteContexto"
          connectionString="Server=localhost;Database=Macoratti;User Id=postgres;Password=******;"
          providerName="Npgsql" />
  </connectionStrings>

Concluímos essa etapa onde já definimos as classes POCO que irão gerar as nossas entidades, o banco de dados Macoratti e as tabelas Artista e Album.

Na próxima parte do artigo vamos retornar ao formulário form1.vb do projeto para definirmos a interface com o usuário e realizarmos as operações com as entidades e o banco de dados usando o LINQ e o Entity Framework.

João 3:13 Ora, ninguém subiu ao céu, senão o que desceu do céu, o Filho do homem.

João 3:14 E como Moisés levantou a serpente no deserto, assim importa que o Filho do homem seja levantado;

João 3:15 para que todo aquele que nele crê tenha a vida eterna.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti