C# Entity Framework: Entendendo o funcionamento do Model-First

Neste artigo abordaremos os conceitos do desenvolvimento com Entity Framework através do model-first. Veremos como criar um banco de dados através do data model (arquivo .EDMX) pelo Visual studio.

Neste artigo será apresentada a abordagem de desenvolvimento Model-First no Entity Framework 4.1, diferentemente do Code-First está abordagem nos permite modelar nossa base de dados de forma visual através dos recursos do próprio Visual Studio, através da criação de um arquivo .EDMX. Esta abordagem apresenta algumas das vantagens: como não há necessidade de conhecimentos específicos da estrutura do banco de dados e nem de como o próprio Entity Framework funciona. Por outro lado, isso pode causar algumas dores de cabeça no futuro em relação a manutenções e alterações nas regras de negócio da aplicação.

Para demonstrar o funcionamento, o primeiro passo será a criação de um banco de dados chamado Vendas com duas tabelas que são Clientes e Compras. A tabela clientes terá duas colunas chamadas de id e ClienteNome, e a tabela de compras terá quatro colunas: id, DataCompra, ValorCompra e ClienteID, sendo que toda a estrutura da base de dados será gerada com o auxílio da própria IDE.

Nota: Note que a coluna ClienteID da tabela de Vendas está representando um relacionamento de um-para-muitos com a tabela de Clientes.

O segundo passo é a criação de um projeto Windows Forms Application utilizando a linguagem de programação C# com o nome de TestModelFirst, como mostrado na Figura 1.

Figura 1. Janela de criação do projeto no Visual studio 2010

Em seguida, criaremos o DataModel onde iremos modelar a estrutura do banco de dados. Para isso, basta clicarmos com o botão direito no projeto , Add , New Item ou CRTL + SHIFT + A e escolheremos ADO.NET Entity Data Model. Veja o exemplo da Figura 2.

Figura 2. Janela de criação do DataModel

Preencheremos o campo name com VendasModel e em seguida clicaremos em add Em seguida, no assistente para criação do DataModel escolheremos o Empty Data Model, pois iremos adicionar as entidades manualmente ao modelo. Veja a Figura 3.

Figura 3. Escolhendo o tipo do DataModel

Toda estrutura do banco de dados será montada neste arquivo para em seguida ser gerada. Começaremos modelando a entidade Clientes clicando na toolbox do lado direito e arrastando um elemento do tipo Entity para o modelo da mesma forma como se estivéssemos programando em uma página .aspx.

Em seguida, adicionaremos duas propriedades que virarão futuramente duas colunas na tabela, são elas: ID, ClienteNome. Repetiremos o mesmo processo para a criação da entidade Compras que conterá as propriedades ID,DataCompra (tipo datetime) e Valor (tipo decimal). Veja as Figuras 4 e 5.

Figura 4. ToolBox com os elementos de modelagem

Figura 5. Entidades modeladas com todas as colunas

Nota: Na hora de criar as propriedades das entidades escolha o tipo Scale property, e na coluna Valor defina sua propriedade Scale para 2. Para isso, basta clicar em cima da coluna e em seguida ir na aba de propriedades.

Com as entidades criadas precisamos criar o relacionamento entre as mesmas, por isso iremos utilizar mais uma vez os recursos do visual studio, clicando com o botão direito na entidade Clientes e em seguida em Add – Association. Esse é o assistente para criação de relacionamentos e será iniciado como na Figura 6.

Figura 6. Janela para criação de relacionamentos de entidades

O relacionamento que precisa ser criado será o de um-para-muitos entre clientes e compras. É preciso preencher com atenção os campos Entity e Multiplicity de cada entidade. Em seguida, clicando em OK o visual studio gerará automaticamente um campo ClienteID na entidade de compras, assim, o modelo de dados estará completo para finalizar. Compilaremos a aplicação apertando CTRL + SHIFT + B. Observe a Figura 7.

Figura 7. Modelo de dados final

Vendo os Resultados

Para acessarmos os recursos do Entity framework devemos adicionar referência ao mesmo no projeto. Para isso, clique com o botão direito na pasta References do projeto e em seguida em Add Reference, conforme a Figura 8.

Figura 8. Adicionando referencia ao Entity etapa 1

No caso deste exemplo a DLL já se encontra salva localmente na máquina, mas vocês podem também instala-la na sua aplicação utilizando o Nuget. Observe as Figuras 9 e 10.

Figura 9. Adicionando referencia ao Entity etapa 2

Figura 10. Referência adicionada com sucesso

Com a referência ao Entity Framework feita no projeto abriremos o arquivo Form1.cs. Adicionaremos na parte superior do arquivo a referência ao Entity framework através do using. Também adicionaremos um controle Button ao Form1 e colocando-o no canto superior direito, mude o nome do botão para btnAdd alterando o valor da propriedadeName btnAdd e o valor da propriedade Text para “Adicionar”. Em seguida, clique duas vezes em btnAdd para ser criado um evento Click (). Na Listagem 1 temos o código do evento.

Listagem 1. Evento click do botão btnAdd

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 Clientes NovoCliente = new Clientes(); NovoCliente.ClienteNome = "Josh Bailey"; // Criando o contexto VendasModelContainer context = new VendasModelContainer(); // adicionando os registros e salvando context.Cliente.AddObject(NovoCliente); context.Compras.AddObject(NovaVenda); context.SaveChanges(); MessageBox.Show("Registro adicionado com sucesso"); } catch (Exception ex) { MessageBox.Show("Um erro ocorreu durante o processo: " + ex.Message); } }

O evento cria instâncias das entidades Clientes e Vendas que modelamos anteriormente. Também é criado um objeto Contexto que é usado para adicionar os novos itens para as tabelas Clientes e Vendas, chamando o método add () para cada uma das tabelas, acrescentando novos registros à 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 o resultado da operação realizada.

Para executarmos o projeto, clique em Run para que o aplicativo seja compilado e executado. Em seguida, clicando no botão add faremos com que a aplicação efetue a gravação do registro, retornando uma exceção que pode ser vista na Figura 11.

Figura 11. Exceção lançada devido ao falta de criação de uma conexão

Isso ocorreu, pois devemos configurar manualmente o arquivo de conexão, ou seja, o app.config da aplicação.Para isso, utilize o código da Listagem 2.

Listagem 2. Arquivo de conexão

<configuration> <connectionStrings> <add name="VendasModelContainer" connectionString="metadata=res://*/Vendas.csdl|res://*/Vendas.ssdl| res://*/Vendas.msl;provider=System.Data.SqlClient;provider connection string="Data Source=MICENOTE11\SVCSQLLOCAL;Initial Catalog=Vendas;Persist Security Info=True;User ID=sa;Password=A****; MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" /> </connectionStrings> </configuration>

Colocando o código acima no app.config, você deve mudar apenas as configurações de Data Source, ID e Password para as configurações locais da máquina onde a aplicação será executada. Repetiremos o processo de execução e clicaremos no botão add para 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 12.


Figura 12. Registros adicionados com sucesso na base de dados

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

Figura 13. Janela do server explorer do visual studio 2010

Clique com o botão direito em Data Connection e escolha Add Connection para que apareça a caixa de diálogo para então escolhermos os Data Source, como mostrado na Figura 14.

Figura 14. Caixa de diálogo 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 15.

Figura 15. 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 instaladas na máquina. Depois disso 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 16.

Figura 16. 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.

Clicando com o botão direito na tabela de Clientes e logo em seguida em Show Table Data, o visual studio mostrara que a tabela contem os registros esperados relativos as informações do cliente. Veja a seguir na Figura 17.

Figura 17. Tabela com os dados do cliente

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

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

Com isso, espero que tenham gostado deste artigo. Um grande abraço a todos e até a próxima.

Artigos relacionados