O code-first (introduzido no Entity Framework 4.1) é comumente usado quando se quer ter um controle maior há nível de código-fonte do modelo de dados gerado, pois as classes são escritas usando a metodologia POCO e, em seguida, é que o banco de dados é gerado a partir dessas classes, apresentando assim total independência com o arquivo (.EDMX).

Essa abordagem é muito usada por desenvolvedores que seguem os princípios do Domain-Driven Design (DDD), onde as classes são codificadas, primeiro para gerar o banco de dados necessário para persistir os dados. Observe logo em seguida a criação do projeto onde será mostrada a criação de duas tabelas em uma relação de um-para-muitos para exemplificar o uso do code-first.

Nota: POCO é basicamente a versão .Net do POJO - Plain Old Java Object. Na POCO é onde se localiza os seus objetos de negócio, ou seja, qualquer lógica de negócio pode ser colocada lá dentro. Mas há uma coisa que o POCO não pode ter que é a sua principal característica: a ausência de métodos de persistência.

Criando o Projeto no Entity Framework code-first

Inicie o Visual Studio 2012 e escolha File | New | Project para visualizar a janela de criação do projeto, e então escolha Visual C# | Windows | Windows Forms Application. Marque Create Directory For Solution se o mesmo não estiver marcado e nomeie a aplicação com o nome de TestCodeFirst e clique em ok. A tela ficará como na Figura 1.

Criando
o projeto no visual studio
Figura 1. Criando o projeto no visual studio

Para que a criação do banco de dados ocorra com sucesso, classes que descrevam sua estrutura devem ser criadas para a estrutura de um-para-muitos. Para isso, a criaremos duas classes: clientes e compras. Cada vez que um cliente visita a loja e realiza uma compra o valor da mesma é adicionado à conta do cliente e quando esse cliente atinge certo valor nesta conta a loja o premia com algum tipo de recompensa. Veja o código da Listagem 1.


  public class Cliente
  {
          // Identificador do Cliente.
     public Int32 ClienteId { get; set; }
     public String ClienteNome { get; set; }
     // Fornece ligação para a classe de Compras.
     public virtual List<Compras> Compras { get; set; }
  }
  public class Compras
  {
     // Define as entradas de compras do cliente.
       public Int32 CompraId { get; set; }
       public DateTime DataCompra { get; set; }
       public Decimal Valor { get; set; }
          // Armazena o identificador do cliente dessa compra.
      public Int32 ClienteId { get; set; }
   }
Listagem 1. Classes que representam as entidades do banco

Para a criação do contexto da aplicação, primeiro deve-se fazer referência ao Entity Framework propriamente dito e, para isso, clique com o botão direito na pasta References do projeto e em seguida em Add Reference (Figura 2).

Adicionando referencia ao Entity etapa 1
Figura 2. Adicionando referencia ao Entity etapa 1

No caso deste exemplo a DLL já se encontra salva localmente na máquina (Figura 3), mas você pode também instalá-la na sua aplicação utilizando o Nuget.

Adicionando referencia ao Entity etapa 2
Figura 3. Adicionando referencia ao Entity etapa 2
Referência adicionada com sucesso
Figura 4. Referência adicionada com sucesso

Com a referência ao Entity Framework adicionada no projeto (Figura 4) para que o contexto seja criado de forma manual é necessária a criação de uma classe que o represente. Para isso, use o código da Listagem 2.


  public class VendasContexto : DbContext
      {
          // Especifique o nome do banco de dados como Vendas.
          public VendasContexto()
              : base("Vendas")
          { 
             
          }
          // Cria um conjunto de tabelas para cada um dos itens de dados
          public DbSet<Compras> Vendas { get; set; }
          public DbSet<Cliente> Clientes { get; set; }
      }
Listagem 2. Classe responsável pela criação do contexto

Este código irá criar duas conexões com o banco de dados. A primeira será uma tabela chamada Compras que detém os registros de compra para cada cliente, e a segunda será uma tabela chamada Clientes que detém as informações do cliente. Neste artigo serão necessários dois registros no banco de dados para criar um ciclo de transação completa no banco de dados. Apertando CRTL + SHIFT + B poderá compilar a aplicação para verificar se a mesma não apresenta algum erro.

Nota: Observem o construtor herdando da sua classe base que representa nesse caso o nome do seu banco de dados, caso não especifique esse valor o banco de dados será criado usando o nome do aplicativo mais o contexto que não é uma pratica recomendada.

Neste ponto temos as classes e o contexto necessários para interagir com o banco de dados que nem existe ainda, pois o mesmo só será criado quando for adicionado um registro a ele. Sendo assim, veja a seguir como usar as classes criadas anteriormente para adicionar um registro ao banco de dados.

Abrindo o arquivo Form1.cs, adicione na parte superior do arquivo a referência ao Entity framework através do using. Adicione um controle Button ao Form1 e coloque-o no canto superior direito, mude o nome do botão para btnAdd alterando o valor da propriedade Name btnAdd e o valor da propriedade Text para “Adicionar”. Em seguida, clicando duas vezes em btnAdd, crie um evento Click() para ele fique como o da Listagem 3.


  private void btnAdd_Click(object sender, EventArgs e)
          {
              try
              {
                  // Criando uma venda
                  Compras NovaVenda = new Compras();
                  NovaVenda.Valor = new Decimal(5.99);
                  NovaVenda.DataCompra = DateTime.Now;
   
                  // Criando uma cliente
                  Cliente NovoCliente = new Cliente();
                  NovoCliente.ClienteName = "Josh Bailey";
   
                  // Criando o contexto
   
                  VendasContexto context = new VendasContexto();
                  // adicionando os registros e salvando
                  context.Clientes.Add(NovoCliente);
                  context.Vendas.Add(NovaVenda);
                  context.SaveChanges();
                  MessageBox.Show("Registro adicionado com sucesso");
              }
              catch (Exception ex)
              {
                  MessageBox.Show("Um erro ocorreu durante o 
                    processo: " + ex.Message);
              }
          }
Listagem 3. Evento click do botão btnAdd

O evento acima cria um objeto VendasContexto que é usado para adicionar os novos itens para as tabelas Clientes e Vendas. O código, em seguida, chama o método add() para cada uma das tabelas e acrescentam novos registros a elas. Ao fazer chamada ao método SaveChanges(), faz com que as alterações no banco de dados sejam comitadas realmente e também cria a base de dados. O fluxo de execução termina com uma mensagem de retorno para o usuário dizendo qual foi resultado da operação realizada.

Para visualizarmos o resultado do projeto, basta clicar em Run para que o aplicativo seja compilado e executado. Em seguida, clicando no botão add faça com que a aplicação efetue a gravação do registro que, caso ocorra com sucesso, a aplicação deve apresentar o comportamento mostrado na Figura 5.

Registros adicionados com sucesso na base de dados
Figura 5. Registros adicionados com sucesso na base de dados

Os resultados agora estão registrados na base de dados. Para visualizarmos basta abrir o server Explorer, escolhendo o menu View e Server Explorer ou pressionando Ctrl + Alt + S, como mostrado na Figura 6.

Janela do server explorer do visual studio
Figura 6. Janela do server explorer do visual studio

Clique com o botão direito em Data Connection e escolha Add Connection. Em seguida, aparecera a caixa de dialogo para escolher os Data Source, conforme a Figura 7.

Caixa de dialogo para escolha da fonte de dados
Figura 7. Caixa de dialogo para escolha da fonte de dados

Escolhendo Microsoft SQL Server e clicando em continuar aparecerá uma caixa de diálogo Add Connection, como a mostrada na Figura 8.

Caixa de dialogo para realização da conexão com o servidor de banco de dados
Figura 8. Caixa de dialogo para realização da conexão com o servidor de banco de dados

No campo Server Name selecionaremos a instância do SQL Server instalada na máquina; depois de escolhida basta selecionarmos o banco de dados Vendas criado neste artigo no dropdown Select or enter a database name. Através do Server Explorer pode-se notar que o banco de dados Vendas contém duas tabelas: Clientes e Compras, como esperado, e que essas duas tabelas têm as colunas esperados, como mostrado na Figura 9.

Estrutura do banco de dados Vendas
Figura 9. Estrutura do banco de dados Vendas

Claro que a estrutura desse banco pode ser melhorada para atender a regras de negócio muito mais complexas, mas para este artigo o importante é verificar a existência dos registros incluídos neste exemplo e, para isso, usaremos uma ferramenta que o Visual Studio nos oferece para aprofundarmos ainda mais nessas tabelas.

Clicando com o botão direito na tabela de Clientes e logo em seguida em Show Table Data, o visual studio mostrará que a tabela contém os registros esperados relativos as informações do cliente, conforme a Figura 10.

Tabela com os dados do cliente
Figura 10. Tabela com os dados do cliente

O mesmo vale para a tabela de compras onde se deve atentar para o campo ClienteId, que serve como ligação da compra ao respectivo cliente. Observe a Figura 11.

Tabela com os dados da compra de cada cliente
Figura 11. Tabela com os dados da compra de cada cliente

Com isso, neste artigo abordamos os conceitos do desenvolvimento com Entity Framework através do code-first. Aprendemos como criar um banco de dados através de classes e também alguns segredos sobre ferramentas que o visual studio nos proporcionam para facilitar o desenvolvimento de aplicativos. Espero que tenham gostado deste artigo, um grande abraço a todos e até a próxima.