VB.NET - SQL Server e Entity Framework na Copa do mundo de 2014 - I


Bem,  falta menos de um mês para o início da copa do mundo de 2014, e, polêmicas à parte, o VB .NET não poderia deixar de mostrar a sua cara ou mesmo as suas garras neste evento.

Aproveitar um assunto de grande interesse geral pode ser uma boa forma de introduzir conceitos para quem esta iniciando o aprendizado em um assunto.

Então aproveitando o assunto copa do mundo eu resolvi criar a toque de caixa um programa para acompanhar os jogos da copa do mundo de 2014 usando os recursos da linguagem VB .NET e do Entity Framework.

Como o tempo é curto resolvi criar um programa simples que fosse funcional e que usasse os recursos do Entity Framework 6 do Visual Studio Express 2012 for Windows Desktop a nível básico de forma a poder introduzir o tecnologia de acesso a dados recomendada pela Microsoft para quem esta iniciando.

Vou tentar resumir todo o assunto em 4 artigos e tentar publicar os artigos até o dia 6 de maio, uma semana antes da copa iniciar.

Como meu tempo esta muito escasso eu vou ser bem sucinto nas explicações citando referências de artigos já publicados por mim no site Macoratti .net.

Recursos Usados

Objetivo

Aprendizado

Apresentação do Programa

Nosso programa será uma aplicação Windows Forms padrão cujo formulário principal pode ser visto abaixo:

O formulário para cadastro dos grupos da copa mundo.

O formulário para cadastro das seleções onde a bandeira de cada seleção no formato .png esta sendo armazenado em uma pasta separada e associada a cada seleção.

O formulário para cadastro de jogadores com foto agrupados por seleção. Neste caso as fotos estão sendo armazenadas no banco de dados SQL Server.

O formulário de cadastro das 12 sedes da copa do mundo com fotos armazenadas no SQL Server.

O formulário de cadastro dos jogos da copa do mundo.

O formulário que exibe os jogos de cada grupo e a classificação permitindo ao usuário informar um placar e fazer simulações para classificação.

Creio que esses são os formulários principais que iremos abordar neste curso relâmpago onde vamos usar o Entity Framework em uma aplicação Windows Forms para gerenciar dados dos jogos da copa do mundo.

Dando o pontapé inicial -  Criando o projeto no Visual Studio

Para que todos possam acompanhar o artigo eu vou criar o projeto no Visual Studio 2012 Express for desktop que é uma ferramenta grátis e funcional que vamos usar para criar o nosso projeto. (Você também pode usar o Visual Studio 2012 ou o Visual Studio 2010 para criar o projeto)

Nota: A versão 2013 do Visual Studio já esta disponível.

Abra o Visual Studio 2012 Express for Windows Desktop e clique em New Project.

Selecione a linguagem Visual Basic e o template Windows Forms Application e informe o nome Copa_2014 para  a solução e clique no botão OK;

Pronto já temos nossa solução e projeto criados e podemos iniciar outras jogadas.

Fazendo um passe - definindo o  modelo de dados

Nossa primeira jogada será definir o banco de dados e as tabelas usadas em nossa aplicação.

Essa abordagem é a tradicional, ela funciona, mas é bom saber que existem outras abordagens onde um projeto pode começar com a modelagem das classes ou mesmo com a definição dos testes (TDD - Test Drive Development)

Usando o  Entity Framework podemos adotar uma das 3 abordagens a seguir em nosso projeto:

Database First - Esse fluxo de trabalho é indicado se você já tem um banco de dados ou se preferir usar outra ferramenta para criar seu banco de dados. O DataBase First parte do seu banco de dados e utiliza a engenharia reversa para criar as classes (entidades) e os mapeamentos. Este modelo mapeia todas as tabelas do banco de dados, visões, procedimentos armazenados e colunas em classes, métodos e propriedades
 
Model First - Esse fluxo é indicado quando você não tem um banco de dados e prefere trabalhar em um ambiente visual ao projetar seu modelo e banco de dados. Uma vez feito isso, você pode gerar código para criar o banco de dados e todas as suas tabelas, bem como gerar a entidade ou classes a serem usados no código.
 
Code First - Este fluxo é indicado quando você quer ter o controle total de todos os aspectos do ciclo de desenvolvimento, incluindo o desenvolvimento do banco de dados. Nele você vai fazer tudo via código e vai definir manualmente as suas classes, relacionamentos e mapeamentos para posteriormente gerar um banco de dados.

Em nosso projeto iremos adotar a abordagem DataBase First onde iremos criar o banco de dados e as tabelas usando o SQL Server Management Studio Express.

No projeto eu vou usar a nova versão do SQL Server Express LocalDB conhecida como LocalDB, mas você também pode usar o SQL Server Express Edition. Utilizando o SQL Server LocalDB poderemos migrar facilmente as informações para a versão do SQL Server quando da implantação da nossa aplicação em ambiente de produção.

1- SQL Server Express LocalDB

SQL Server Express LocalDB é uma versão leve do SQL Server que tem muitas características de programação de um banco de dados SQL Server. O SQL Server Express LocalDB é executado no modo de usuário e tem uma instalação rápida sem a necessidade de configuração.

No Microsoft SQL Server, o banco de dados ou qualquer código Transact-SQL podem ser movidos de SQL Server Express LocalDB para o SQL Server e SQL Azure, sem quaisquer passos de atualização.

Então, o SQL Server Express LocalDB pode ser usado como um ambiente de desenvolvimento para aplicações que utilizem todas as edições do SQL Server.

O SQL Server Express LocalDB permite recursos como procedimentos armazenados, funções definidas pelo usuário e agregados, Integração com NET Framework, tipos espaciais e outros recurso que não estão disponíveis no SQL Server Compact.

Vamos criar um banco de dados no SQL Server 2012 chamado Copa2014.mdf e a seguir definir as seguintes tabelas neste banco de dados:

1- Tabela Grupos

 

2- Tabela Selecoes

3- Tabela Jogadores

4- Tabela Locais

5- Tabela Jogos

6- Tabela Classificacao

Todas as chaves primárias das tabelas são do tipo Identity o que torna o gerenciamento do valor destes campos uma competência do SGBD SQL Server.

Relembrando alguns conceitos importantes da modelagem de dados temos que:

Em um banco de dados Relacional como o SQL Server existem relacionamentos entre tabelas e estes relacionamentos podem ser de 3 tipos :

  • Um para Um
  • Um para Vários
  • Vários para Vários
  • Abaixo vemos o diagrama do banco de dados exibindo o relacionamento entre as tabelas que criamos:

    Invertendo o jogo - Apresentando o Entity Framework

    O Entity Framework - EF, é um conjunto de tecnologias da ADO .NET que suporta o desenvolvimento a aplicações orientadas a dados. Arquitetos e desenvolvedores de aplicações orientadas a dados tem se debatido com a necessidade de alcançar dois objetivos distintos:

    O problema é que os dados podem estar distribuídos em múltiplos sistemas de armazenamentos, cada um com suas particularidades e protocolos e mesmo em situações no qual somente um único sistema de armazenamento é usado ainda a existe a necessidade de balancear os requisitos de armazenamento com os requisitos de escrever um código eficiente.

    O Entity Framework - EF, permite aos desenvolvedores trabalhar com dados na forma de propriedades e objetos específicos do domínio como clientes e produtos, etc, sem ter que relacioná-los com as tabelas do banco de dados e as colunas onde os dados estão armazenados. Isto é possível pela elevação do nível de abstração no qual os desenvolvedores podem trabalhar quando estão tratando com os dados e pela redução do código que é necessário para manter as aplicações orientadas a dados.

    O Entity Framework é um componente da .NET Framework e pode ser usado em qualquer ambiente no qual estejam instalados o .NET Framework.

    O Entity Framework renova o modelo conceitual permitindo que os desenvolvedores consultem entidades e relacionamentos neste modelo enquanto contam com o suporte da Entity Framework para traduzir estas operações para comandos específicos da fonte de dados liberando as aplicações das dependências de código específicas de uma fonte de dados particular.

    Um padrão muito usado para modelagem de dados divide o modelo de dados em 3 partes:
    • O modelo Conceitual - Define as entidades e relacionamentos do sistema modelado;
    • O modelo Lógico - Normaliza as entidades relacionamentos entre as tabelas com chaves primárias e constraints para os banco de dados relacionais;
    • O modelo Físico - Análise e aplica as capacidades de um sistema de armazenamento específico definindo detalhes de armazenamento como particionamento e indexação;

    O modelo conceitual, o modelo de armazenamento e o mapeamento entre os dois são expressos em uma especificação externa chamada de Entity Data Model-EDM.

    Dominando a bola - Referenciando o Entity Framework

    Para poder usar os recursos do Entity Framework precisamos incluir uma referência ao Entity Framework em nosso projeto e podemos fazer isso de duas maneiras:

    1. No menu TOOLS opção Library Package Manager opção Package Manager Console

    Esta opção abre o console para que você possa digitar o comando para instalar o pacote desejado. Para instalar o Entity Framework 5.0 digite o comando:

    PM> Install-Package EntityFramework -Version 5.0.0

    Para instalar a última versão, a 6.0.1 digite o comando:

    PM> Install-Package EntityFramework -Version 6.0.1

    1. No menu TOOLS opção Library Package Manager opção Manage Nuget Packages for Solution

    Esta opção abre a janela Manage Nuget Packages. Clique na guia Online para localizar o pacote desejado (você pode usar a caixa Search Online). Localizando o pacote selecione-o e clique no botão Install:

    Nesta opção você instala sempre a última versão disponível.

    Após a instalação você pode verificar na janela Solution Explorer clicando no ícone Show All Files e confirmando na pasta References a referência ao Entity Framework:

    Pronto agora já temos o Entity Framework pronto para ser usado. Vamos criar o modelo de entidades em nosso projeto gerando o Entity Data Model- EDM.

    Fazendo um cruzamento - Criando o modelo de entidades - Entity Data Model

    Os Bancos de dados relacionais usam a abstração de linhas em tabelas, mas as aplicações orientadas a objetos usam a abstração de classes e objetos o que não é a mesma coisa. As ferramentas para mapeamento objeto Relacional (OR/M) tendem a contornar esta diferença mapeando as classes para as tabelas do banco de dados, mas mesmo assim existem algumas características que continuam a exigir um esforço extra após todo esta trabalho.

    O objetivo da ADO .NET Entity Framework é mais ambicioso; o serviço OR/M seria apenas mais um serviço e outros serviços como relatórios, sincronização, backup, etc. também seriam oferecidos; para cobrir todos estes serviços foi criado um modelo de dados que é similar ao usado no paradigma orientado a objetos que o desenvolvedor utiliza, e também é independente de qualquer linguagem ou plataforma.

    Este modelo de dados é conhecido como Entity Data Model (EDM) ou modelo de entidades de dados e pode ser considerado o coração da do Entity Framework.

    O EDM é um modelo entidades - relacionamentos onde :
    • Entidades - são instâncias de tipos de entidades como Clientes, Produtos os quais estão estruturados em registros e chaves;
    • Relacionamentos - são instâncias de tipos de relacionamentos que são associações entre duas ou mais tipos de entidades;

    O Entity Data Model é um modelo de dados Entidade-Relacionamento cujo conceito central são as entidades e os relacionamentos, onde Entidades são instâncias de Tipos de entidades como Cliente, Produto, Categoria as quais são estruturas de registros com uma chave. Um Chave de Entidade é formada a partir de um subconjunto de propriedades do Tipo da entidade. A chave (clienteID, ProdutoID, etc) é um conceito fundamental para identificar de forma única , atualizar instâncias e permitir que as instâncias de entidades participem nos relacionamentos.

    É a partir do modelo de entidades que podemos escrever código usando as diferentes APIs , como o provedor EntityClient ou o Object Services com LINQ to Entities.

    No menu PROJECT clique em Add New Item e a seguir selecione a guia Data e clique em ADO .NET Entity Data Model informando o nome Copa.edmx e clique no botão Add;

    Na próxima janela selecione a opção : Generate from Database e clique em Next>;

    A seguir selecione a conexão com o banco de dados Copa2014;

    Deixe marcada a opção para salvar a conexão no arquivo App.Config e aceite o nome padrão para o contexto: Copa2014Entities e clique no botão Next>;

    Expanda e selecione todas as tabelas do banco de dados e aceite o nome para namespace Copa2014Model e clique em Finish;

    Será gerado na Janela Soluction Explorer o arquivo Copa.edmx e o modelo de entidades (as classes) que pode ser visto no descritor conforme figura a seguir:

    Observe que temos todas as tabelas mapeadas para entidades, onde os relacionamentos entre as tabelas existem como associações entre as entidades permitindo a navegação entre as mesmas.

    Você pode editar as classes para modificar seus nomes ou os nomes de suas propriedades para adicionar relacionamentos com outras classes, incluir herança,etc.

    Lazy Load é o mecanismo utilizado pelos frameworks de persistência para carregar informações sobre demanda. Esse mecanismo torna as entidades mais leves, pois suas associações são carregadas apenas no momento em que o método que disponibiliza o dado associativo é chamado. Assim quando objetos são retornados por uma consulta, os objetos relacionados não são carregados ao mesmo tempo, ao invés, eles são carregados automaticamente quando a propriedade de navegação for acessada.  É também conhecido como "lazy loading".

    Na janela de propriedades vemos as propriedades do nosso container gerado que representa o nosso contexto e que nos dá acesso as entidades:

    Observe o nome do container, o seu namespace e a opção Lazy Loading Enabled marcada como True;

    No arquivo  de configuração da aplicação -  App.Config - vemos a string de conexão ou entity connection que foi gerada e salva:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, 
    PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
      </startup>
      <connectionStrings>
        <add name="Copa2014Entities" connectionString="metadata=res://*/Copa.csdl|res://*/Copa.ssdl|res://*/Copa.msl;provider=System.Data.SqlClient;
    provider connection string=&quot;data source=(LocalDB)\v11.0;initial catalog=Copa2014;integrated security=True;MultipleActiveResultSets=True;
    App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
          <parameters>
            <parameter value="v11.0" />
          </parameters>
        </defaultConnectionFactory>
      </entityFramework>
    </configuration>

    Temos assim tudo pronto para trabalharmos diretamente com as entidades e não precisaremos nos preocupar mais com tabelas, comandos SQL ou objetos ADO .NET.

    O Entity framework gerou todo modelo e realizou o mapeamento objeto relacional. Tudo isso sem termos que digitar nenhuma linha de  código.

    Agora já podemos usar o Entity Data Model gerado para realizar o acesso a persistência dos dados em nossa aplicação.

    O arquivo com extensão .edmx gerado contém os 3 arquivos XML EDM mesclados de forma que toda modificação feita no descritor atualizará os arquivos.

    Aguarde a próxima parte do artigo onde irei criar os formulários para grupos, seleções, jogadores, jogos e  classificacao.

    Salmos 19:1 Os céus proclamam a glória de Deus e o firmamento anuncia a obra das suas mãos.

    Salmos 19:2 Um dia faz declaração a outro dia, e uma noite revela conhecimento a outra noite.

    Salmos 19:3 Não há fala, nem palavras; não se lhes ouve a voz.


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

    Quer migrar para o VB .NET ?

    Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

    Quer aprender C# ??

    Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
     

       Gostou ?   Compartilhe no Facebook    Compartilhe no Twitter

    Referências:


    José Carlos Macoratti