Entity Framework x ADO .NET
 Hoje vamos fazer uma comparação entre o EF Core e a ADO .NET.

A ADO.NET e o Entity Framework são conectores entre as aplicações e o banco de dados, e, possuem um conjunto de bibliotecas que são usadas para acessar serviços de dados e dar suporte às necessidades de desenvolvimento de bancos de dados relacionais ou XML em aplicativos .NET, como aplicativos console, aplicativos desktop, aplicativos web e serviços WCF/Web API.

Ambos são parte integrante da plataforma .NET com classes e objetos .NET. Assim para  criar um aplicativo de banco de dados, basta projetar o front-end e conectá-lo a sua fonte de dados usando ADO.NET ou Entity Framework.

Mas qual a diferença entre ADO .NET e Entity Framework ?

O que é ADO.NET

ADO.NET significa ActiveX Data Object, fornece uma ponte entre sistemas relacionais e não relacionais. É uma ótima tecnologia depois do ADO tradicional, que dá a vantagem de criar tudo do zero e ter um controle total de acesso de um banco de dados na aplicação. Você pode obter dados usando ADO.NET no modo desconectado e pode atender a um grande número de conexões sem comprometer o desempenho de um aplicativo.

Na ADO.NET, você pode acessar e modificar dados armazenados em fontes de dados como Oracle, MS SQL Server, MySQL e XML. A ADO .NET possui um conjunto de classes e provedores de dados equivalentes aos drivers OLE DB, ODBC e JDBC, e,  e usa principalmente dois namespaces :  System.Data.dll e System.Xml.dll que suporta a interação entre cliente e banco de dados.

Você pode usar qualquer IDE que suporte .Net Framework para projetar o front-end de um aplicativo e conectá-lo ao banco de dados por meio do ADO.NET.

Arquitetura ADO.NET

A ADO.NET usa uma arquitetura multicamada que possui diferentes componentes .NET para interagir com o banco de dados e processar o resultado da consulta usando objetos Connection, Reader, Command, Adapter e DataSet/DataTable.

Exemplo de código usando ADO .NET :

public class UsuarioRepository
   {
        public DataSet GetUsuarios()
        {
           // Inicializa um dataset desconectado
           DataSet ds = new DataSet();
            try
            {
                //Cria e inicializa a conexão
                using (SqlConnection sqlConn =
                         SqlConnection ("DataSource=localhost;Initial Catalog=TestDB;
                                        User ID=sa;Password=admin;"))
                {
                    //Abre a conexão
                    sqlConn.Open();
                    // Escreve o comando SQL para acessar a tabela
                    string sql = "select * from Usuarios";
                    SqlCommand sqlCmd = new SqlCommand(sql, sqlConn);
                    // Define o tipo do Command
                    sqlCmd.CommandType = CommandType.Text;
                    // Executa o command
                    SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlCmd);
                    // Obém os dados no modo desconectado
                    sqlAdapter.Fill(ds);
                }
            }
            catch (Exception ex)
            {
                // Criar o log de erros
            }
            // retorna o dataset
            return ds;
        }
    }
}

O que é Entity Framework ?

A Microsoft introduziu o Entity Framework no .NET Framework 3.5 em 2008, para permitir que os desenvolvedores se concentrem em objetos de domínio de negócios em vez de trabalhar com dados armazenados de banco de dados subjacentes, assim,  eliminar a necessidade de escrever código para escrever e ler dados de fontes de dados.

O Entity Framework é um Object Relational Mapper (ORM), construído no topo da ADO.NET; ele cria o código necessário automaticamente para armazenar e recuperar dados, portanto, o desenvolvedor só precisa se concentrar na criação do aplicativo, e não em lidar com bancos de dados e seus problemas.

Você pode fazer uma aplicação usando o Entity Framework com conhecimento mínimo de banco de dados, pois o framework está fazendo a maioria das operações e comandos, e é fácil implementar operações CRUD nele. Portanto, ele reduz o tempo de desenvolvimento e você pode se concentrar facilmente na produção em vez dos bancos de dados.

Arquitetura do Entity Framework

O Entity Framework consiste nas três camadas a seguir:

Object Service

O Object Service é a camada superior na arquitetura do Entity Framework. Ele mantém a sessão entre o aplicativo e o banco de dados e executa operações CRUD com a ajuda de consultas. Ele representa as entidades de modelo de um aplicativo.

Entity Client

O Entity Client é a camada principal no Entity Framework, que conecta a camada de fonte de dados à camada de serviço de objeto com a ajuda de provedores. Ela permite que os desenvolvedores escrevam consultas LINQ e leiam ou gravem dados sem gerar classes de esquema conceitual.

Data Provider

A camada Data Provider está diretamente ligada ao banco de dados. Ela é responsável por analisar a consulta em uma expressão de comando SQL nativa no banco de dados e, em seguida, fornecer os resultados de volta aos objetos de domínio do aplicativo.

Você pode inserir um novo usuário na fonte de dados usando uma abordagem Code-First do Entity Framework no exemplo a seguir:

    public class UsuarioRepository
    {
        public static void Main(string[] args)
        {
           // Inicializa a classe de contexto
            using (var usuarioContextDB = new UsuarioContext())
            {
                // Cria um novo objeto Usuario
                var usuario = new Usuario() { UsuarioId = "USU001" };
      
                // Chama o comando Add
                usuarioContextDB.Usuarios.Add(usuario);

                // Executa o comando para persistir
                usuarioContextDB.SaveChanges();               
            }
        }
    }

Desempenho

O ADO.NET oferece melhor desempenho, pois está diretamente conectado à fonte de dados, o que torna o processamento mais rápido do que o Entity Framework, pois traduz as consultas LINQ para SQL primeiro e depois processa a consulta.

Velocidade de Desenvolvimento

O ADO.NET dá total controle sobre a camada de dados, que o desenvolvedor precisa para fazer classes e métodos do zero para permitir a comunicação entre aplicação e banco de dados. Isso requer mais esforço e tempo para construir uma estrutura completa de camada de acesso a dados. Considerando que, o Entity Framework gera modelos e classes de contexto de banco de dados automaticamente para lidar com operações de banco de dados e, portanto, requer menos esforço e tempo.

Código sustentável

Na ADO.NET, a depuração é complicada à medida que você vai da camada de aplicativo para a camada de banco de dados, um por um, para descobrir o que está acontecendo em um aplicativo, enquanto o Entity Framework fornece relacionamentos claramente modelados de entidades e camadas dependentes.

Flexibilidade

A ADO.NET oferece uma grande flexibilidade em termos de consultas e procedimentos SQL brutos em relação ao Entity Framework, fornecendo controle total sobre um banco de dados.

Conclusão

Siga o caminho certo antes de começar. Se você deseja ter mais controle sobre comandos e instruções SQL, e, quer ter mais desempenho a ADO.NET é uma opção para trabalhar.

O Entity Framework é poderoso o suficiente para lidar com serviços de banco de dados automatizando o mecanismo de geração de código de consultas SQL básicas mas é uma camada de abstração e assim, mesmo estando cada vez mais rápido e gerando consultas SQL otimizadas, ele é mais lento do que usar ADO .NET puro da forma correta.

Você pode ter ambas as abordagens em um único projeto, ou seja, Entity Framework para operações CRUD e ADO.NET para fins de relatório e operações SQL de dados em massa.

E estamos conversados.

"Aguardo ansiosamente e espero que em nada serei envergonhado. Pelo contrário, com toda a determinação de sempre, também agora Cristo será engrandecido em meu corpo, quer pela vida quer pela morte;
porque para mim o viver é Cristo e o morrer é lucro "
Filipenses 1:20-21

Referências:


José Carlos Macoratti