EntityFramework–Apoveitando seu Banco de Dados com PowerTools

Olá pessoal,

Quando uma empresa resolve adotar uma ferramenta de ORM (Mapeamento Objeto Relacional – no nosso caso o EntityFramework),  começa uma grande quebra de paradigma, pois você vai deixar de acessar o banco de dados diretamente (Select, Insert, Update, Delete, etc) e vai passar a trabalhar somente com classes e objetos. Isto torna o desenvolvimento muito mais fácil e produtivo, uma vez que você não precisa ficar se preocupando com os comandos que vão para o banco de dados, já que isto é trabalho do ORM.

Mas e quando você já tem um banco de dados pronto ? Isto sempre gera outra discussão, afinal você pode construir um novo banco, aproveitar o processo e melhorar tudo ou reaproveitar a estrutura do banco existente e incluir somente o ORM ? Quer ouvir outra coisa muito comum: você está criando uma nova funcionalidade ou novo projeto, e resolve utilizar o EntityFramework, mas precisa ler e gravar dados do banco atual. Como fazer ? Escrever as classes POCO na mão ? Obviamente que não, pois para isto existem diversas ferramentas que podem fazer isto para você e uma delas que vamos apresentar hoje é o EntityFramework PowerTools.

Para iniciarmos você precisa baixar o PowerTools através do gerenciamento de extensões do Visual Studio (Tools/Extensions and Updates), e depois procurar pelo Entity Framework Power Tools, conforme a figura abaixo:

SNAGHTML4333684

No meu caso já está instalado, mas caso o seu ainda não esteja, clique no botão “Install” e pronto! Agora vamos criar um projeto para explorar os recursos.

Vamos iniciar criando um projeto Console e adicionando o EntityFramework através do NuGet:

SNAGHTML434d0ea

Agora vamos adicionar o EF:

image

Agora que já temos o EntityFramework, vamos verificar no menu da nossa Solution um novo item chamado Entity Framework (para ver este menu, clique com o botão direito sobre o nome do seu projeto):

image

Veja que temos duas opções:

  • Reverse Engineer Code First: permite ler um banco de dados existente e gerar as classes e o contexto;
  • Customize Reverse Engineer Templates: permite mudar o formado de geração das classes através de um arquivo T4

Se você escolher customizar os templates, terá os seguintes arquivos adicionados ao projeto, que poderão ser modificados de acordo com sua necessidade:

image

Escolhendo gerar as classes com a opção “Reverse Engineer Code First” você terá uma tela para colocar os dados de acesso ao seu banco de dados, faça isto e depois clique em OK para iniciar a geração das classes:

SNAGHTML43ed31c

Agora já temos todo o banco de dados mapeado, e na versão atual do Entity Framework, isto inclui as tabelas e as views. Veja uma parte destas classes na nossa solution:

image

A engenharia reversa faz todo o mapeamento de atributos utilizando FluentAPI e a pasta “Mapping” contém estes mapeamentos.

Agora vamos clicar com o botão direito do mouse em cima do nosso contexto: NorthwindContext.cs:

image

Veja que agora temos outras opções, que são relativas ao banco que foi mapeado. Como estamos trabalhando com CodeFirst, não temos um diagrama visual do nosso banco de dados, mas com a ajuda do PowerTools, clicando na primeira opção: “View Entity Data Model (Read-only), você pode visualizar graficamente como está seu banco de dados, veja abaixo:

image

Veja que todos os relacionamentos foram criados e estão gerados através do FluentAPI no arquivo de mapeamento. Repare que no menu está escrito “Read-only” e isto quer dizer que este diagrama serve apenas para leitura, então não adianta escrever nada nele que não será refletido nas entidades.

É possível também gerarmos um arquivo XML, que se assemelha ao arquivo EDMX (Model First e DataBase First). Existe também uma opção para gerarmos um script DDL, que pode ser executado no servidor de banco de dados para a criação do mesmo. No caso do EntityFramework CodeFirst existe o Migrations que elimina este trabalho de criação e atualização do banco de dados. Veja este post aqui.

Por fim temos uma opção bem interessante: “Generate Views” que gera consultas optimizadas para o banco de dados e ajuda a melhorar a performance da nossa aplicação. Lembrando que se você optar por utilizar as Views, deverá gerá-las sempre que modificar suas classes.

Espero ter esclarecido o uso da ferramenta Entity Framework PowerTools e que este artigo seja muito útil para você!

Um grande abraço e até a próxima.
Carlos dos Santos.

8 Comments


  1. Olá Carlos, Primeiramente gostaria de parabeniza-lo pelo blog.

    Após seguir todos os passos para instalação do Entity Framework Power Tools e do Entity Framework no projeto me deparei com o seguinte problema:

    Ao selecionar a opção Reverse Engineer Code First;
    na tela para colocar os dados de acesso ao banco de dados (Connection Properties), coloquei os dados referente ao meu banco e acionando o botão Test Connection desta mesma tela consigo validar com sucesso porem não lista o banco de dados hospedado na web.

    Obs.: Com o Management Studio 2012 consigo acessar com as mesmas credenciais citadas acima, Adicionando um Entity Data Model ao projeto e criando uma nova conexão também consigo acessar, somente com o uso da opção Reverse Engineer Code First não consigo acessar o banco.

    Ide: Visual Studio 2013 Ultimate update 2
    Tipo Projeto: Asp.Net Mvc 5

    Reply

    1. David,

      Seu banco de dados está em que provedor ? Pois aqui utilizamos com SQL em nuvem sem problemas.

      []s,
      Carlos.

      Reply

      1. O banco está hospedado na kinghost.com.br

        Versão: Microsoft SQL Server 2008 R2 (SP1)

        Reply

        1. David,

          Você já tentou digitar o nome do banco de dados no mesmo local onde ele lista ?

          []s,
          Carlos.

          Reply

          1. Sim coloquei o nome do banco mas não cria as classes somente fecha a janela como se tivesse feito a connection com sucesso.
            Mas seguindo o seu novo post “EntityFramework-Lendo seu banco de dados com o Visual Studio 2013 Update 2” consegui resolver a questão que era utilizar o EntityFramework CodeFirst. =]

            Mais uma vez parabéns pelo trabalho estou aprendendo bastante por aqui.
            Valeu abraço.


  2. Carlos, muito legal o artigo. Agora só tenho uma dúvida: é possível determinar quais tabelas que eu quero para gerar as classes na engenharia reversa? Pergunto isso pois tenho um banco com centenas de tabelas, mas eu tenho um WebAPI que precisa de apenas algumas tabelas e eu gostaria de mapear somente essas que eu preciso.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

Anti-spam: complete the taskWordPress CAPTCHA


This blog is kept spam free by WP-SpamFree.