Entity Framework - Parte 1 - Mais por menos

Oi pessoal, estou devendo um post sobre o Entity Framework tem um tempo. Então vamos nessa!

Antes de mais nada um pouco de conceito. O Entity Framework (EF) é um mapeador objeto relacional (ORM - Object Relacional mapper, sigle em inglês), e o que significa isso? Significa que o papel do EF é mapear uma classe com uma ou mais tabelas no banco de dados, permitindo dessa forma que o desenvolvedor trabalhe com as classes e o EF reflita aquilo no banco de dados, sem a necessidade do programador escrever os SELECTs, UPDATEs, INSERTs e DELETEs.

Da forma tradicional como seria feito um método que retorna uma lista de uma dada classe preenchida? Vamos ao passos:
  1. Criar um objeto que representa uma conexão.
  2. Criar um objeto que representa o comando a ser executado no banco.
  3. Abrir a conexão
  4. Executar o comando
  5. Criar um objeto da lista que você pretende retornar
  6. Iterar o resultado
    1. Obter cada coluna do resultado 
    2. Criar um objeto e preencher ele
    3. Colocar o objeto na lista
  7. Fechar conexão
  8. Retornar lista
Isso equivaleria ao código mais ou menos assim, caso você esteja usando SQL Server:

1:  public List<Category> ObterCategorias()  
2:  {  
3:    SqlConneciton conexao = new SqlConneciton(@"data source=(local); initial catalog=northwind; user id=teste; password=teste;");  
4:    SqlCommand comando = new SqlCommand("select * from categories", conexao);  
5:    List<Category> categorias = null;  
6:    Category categoria = null;  
7:    try  
8:    {  
9:      conexao.Open();  
10:      SqlDataReader reader = comando.ExecuteReader();  
11:      categorias = new List<Category>();  
12:      if (reader != null)  
13:      {  
14:        while (reader.Read())  
15:        {  
16:          categoria = new Category();  
17:          //fiz apenas uma propriedade  
18:          // mas essa linha seria repetida para  
19:          // cada coluna retornada pela query  
20:          categoria.Name = reader["Categoryname"].ToString();  
21:          categorias.Add(categoria);  
22:        }  
23:        reader.Close();  
24:      }  
25:    }  
26:    catch (Exception)  
27:    {  
28:      throw;  
29:    }  
30:    finally  
31:    {  
32:      conexao.Close();  
33:    }  
34:    return categorias;  
35:  }  


Se você ainda usa essa forma eu posso imaginar que você tem um motivo muito forte ou gosta de sofrer. Risos.

Vamos ao mesmo exemplo com Entity Framework:

1:  public List<Category> ObterCategorias()  
2:  {  
3:    NorthwindEntities northwindEntities = new NorthwindEntities();  
4:    return northwindEntities.Categories.ToList();   
5:  }  

Vamos agora fazer um minuto de silêncio para refletir sobre quanto tempo pode ser economizado e gastar tempo com o código de negócio e não de puro acesso a dados. Nessas duas únicas linhas o EF basicamente a mesma coisa do exemplo anterior exceto o try/catch que eu tirei para te deixar mais impressionado.
Além do Oracle e do SQL Server o EF suporta vários outros bancos que você pode ver nessa lista.
Na próxima parte vou apresentar a maneiras como Entity Framework consegue mapear as classes para as tabelas e depois fazer uma aplicação simples para consolidar o conhecimento. Fique ligado aqui!

Postagens mais visitadas