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.
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; }
}
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).
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.
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; }
}
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.
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);
}
}
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.
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.
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.
Escolhendo Microsoft SQL Server e clicando em continuar aparecerá uma caixa de diálogo Add Connection, como a mostrada na Figura 8.
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.
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.
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.
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.