CRUD com Entity Framework e ASP NET MVC

Hoje vamos criar uma pequena aplicação totalmente didádica para criar um CRUD usando o Entity Framework com o ASP NET MVC.

1. Criando a aplicação

Crie um novo projeto web, clique em File -> New Project

Depois selecione Visual C# -> Web -> ASP.NET MVC 2 Web Application e adione um nome (ExemploEF_MVC) e clique em OK.

2. Criando um edmx

Agora vamos adicionar ao projeto um arquivo ADO.NET Entity Data Model que serve para configurar a conexão com o banco e também para fazer o mapeamento do nossas tabelas em classes.

Clique com o botão direito em cima do projeto e selecione a opção Add -> New Item

Selecione a opção Visual C# -> Data -> ADO.NET Entity Data Model e adicione um nome.

Selecione a opção Generate from database e clique em Next

Configure a conexão com a base e clique em Next

Selecione as tabelas que deseja mapear, e clique em Finish

Veja que esse é um pequeno exemplo por esse motivo temos apenas uma tabela para testes.

3. Criando o Controller

Agora vamos criar um novo controller, clique com o botão direito em cima da pasta Controllers e selecione a opção Add -> Controller

Coloque o nome de ContatoController e selecione a opção para criar os actions métodos e clique em Add

Veja que os métodos básicos foram criados automaticamente

4. Codificando action Index

A action Index será responsável por listar os dados, veja abaixo o código.

[sourcecode language=”csharp”]
public ActionResult Index()
{
contatosEntities entidades = new contatosEntities();
List<contato> lst = entidades.CreateObjectSet<contato>().ToList<contato>();
return View(lst);
}
[/sourcecode]

Depois de criado a action, vamos adicionar uma view Index, para isso clique com o botão direito em cima da action e selecione a opção Add View

Depois temos que fazer algumas configurações para a view

  1. Selecione a opção Create a strongly-typed view
  2. Em View data class selecione a classe que foi criada através do Entity, nesse caso ExemploEF_MVC.contato
  3. Em View content selecione a opção List

Vamos compilar o projeto e verificar o resultado.

5. Codificando action Details

A action Details será responsável por mostar um registro específico, veja abaixo o código.

[sourcecode language=”csharp”]
public ActionResult Details(int id)
{
contatosEntities entidades = new contatosEntities();
contato obj = entidades.CreateObjectSet<contato>().Where(a => a.id_contato == id).ToList().First();
return View(obj);
}
[/sourcecode]

Agora vamos adicionar uma nova view conforme demostrado acima, porém na opção View content selecione a opção Details.

Execute o projeto e clique no link Details para ver o resultado.

6. Codificando action Create

A action Create será responsável por salvar um novo registro na base de dados, temos duas actions Create a primeira tem a função de retornar a View e outra é responsável por recuperar os dados do formulário.

Primeiramente vamos implementar a action que vai retornar uma nova view, adicione uma nova view conforme demostrado acima, porém na opção View content selecione a opção Create.

Agora vamos implementar a action que vai recuperar os dados do formulário e persistir na base de dados, veja abaixo o código:

[sourcecode language=”csharp”]
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
// TODO: Add insert logic here
contato entity = new contato();
entity.nome = collection["nome"].ToString();
entity.endereco = collection["endereco"].ToString();
entity.data_nascimento = Convert.ToDateTime(collection["data_nascimento"]);

contatosEntities entidades = new contatosEntities();
entidades.AddObject(entity.GetType().Name, entity);
entidades.SaveChanges();

return RedirectToAction("Index");
}
catch
{
return View();
}
}
[/sourcecode]

Execute o projeto e clique no link Create new para ver o resultado.

7. Codificando action Edit

A action Edit será responsável por mostar um registro específico para alterar seu conteúdo, também possui duas actions Edit, uma para mostar a view e outra para recuperar os dados do formulário.

Primeiramente vamos implementar a action que vai retornar uma nova view com o registro selecionado, veja o código abaixo

[sourcecode language=”csharp”]
public ActionResult Edit(int id)
{
contatosEntities entidades = new contatosEntities();
contato entity = entidades.CreateObjectSet<contato>().Where(a => a.id_contato == id).ToList().First();
return View(entity);
}
[/sourcecode]

Adicione uma nova view conforme demostrado acima, porém na opção View content selecione a opção Edit.

Agora vamos implementar a action que vai recuperar os dados do formulário e persistir na base de dados, veja que primeiramente recuperamos o registro da base e depois alteramos, veja abaixo o código:

[sourcecode language=”csharp”]
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
try
{
// TODO: Add update logic here
contatosEntities entidades = new contatosEntities();
contato entity = entidades.CreateObjectSet<contato>().Where(a => a.id_contato == id).ToList().First();

// Altera os dados
entity.nome = collection["nome"].ToString();
entity.endereco = collection["endereco"].ToString();
entity.data_nascimento = Convert.ToDateTime(collection["data_nascimento"]);

entidades.ApplyCurrentValues<contato>(entity.GetType().Name, entity);
entidades.SaveChanges();

return RedirectToAction("Index");
}
catch
{
return View();
}
}
[/sourcecode]

Execute o projeto e clique no link Edit para ver o resultado.

8. Codificando action Delete

Finalmente vamos criar a action Delete que será responsável por deletar um registro específico, também possui duas actions, uma para mostar a view e outra para recuperar os dados do formulário.

Primeiramente vamos implementar a action que vai retornar uma nova view com o registro selecionado, veja o código abaixo.

[sourcecode language=”csharp”]
public ActionResult Delete(int id)
{
contatosEntities entidades = new contatosEntities();
contato entity = entidades.CreateObjectSet<contato>().Where(a => a.id_contato == id).ToList().First();
return View(entity);
}
[/sourcecode]

Adicione uma nova view conforme demostrado acima, porém na opção View content selecione a opção Delete.

Será criada uma view pedindo a confirmação para deletar o registro, quando clicar no botão Delete a action será acionada, veja o código abaixo.

[sourcecode language=”csharp”]
[HttpPost]
public ActionResult Delete(int id, FormCollection collection)
{
try
{
// TODO: Add delete logic here
contatosEntities entidades = new contatosEntities();
contato entity = entidades.contato.Single(a => a.id_contato == id);
entidades.DeleteObject(entity);
entidades.SaveChanges();

return RedirectToAction("Index");
}
catch
{
return View();
}
}
[/sourcecode]

Execute o projeto e clique no link Delete para ver o resultado.

Conclusão

Podemos concluir que implementar um sistema com Entity Framework é muito produtivo já que não é necessário gastar tempo criando os SQLs para rodar no BD, outra vantagem é a fácil integração com o MVC.

Download do projeto

Até a próxima!

Sobre Leandro Prado

Leandro Silveira Prado é Premier Field Engineer na Microsoft especializado em Application Lifecycle Management.