{"id":371,"date":"2025-03-04T23:07:54","date_gmt":"2025-03-05T02:07:54","guid":{"rendered":"https:\/\/www.wagnersalvi.com.br\/?p=371"},"modified":"2025-03-04T23:07:57","modified_gmt":"2025-03-05T02:07:57","slug":"comparacao-entre-dapper-entity-framework-core-e-ado-net","status":"publish","type":"post","link":"http:\/\/www.wagnersalvi.com.br\/?p=371","title":{"rendered":"Compara\u00e7\u00e3o entre Dapper, Entity Framework Core e ADO.NET"},"content":{"rendered":"\n<p>Ao trabalhar com acesso a banco de dados em C#, tr\u00eas abordagens principais s\u00e3o frequentemente consideradas: <strong>ADO.NET<\/strong>, <strong>Dapper<\/strong> e <strong>Entity Framework Core (EF Core)<\/strong>. Cada uma dessas tecnologias tem suas vantagens e desvantagens, dependendo das necessidades do projeto. Neste artigo, exploraremos as diferen\u00e7as entre elas para ajudar a escolher a melhor op\u00e7\u00e3o para cada cen\u00e1rio.<\/p>\n\n\n\n<p>N\u00e3o h\u00e1 uma abordagem \u00fanica que sirva para todos os projetos. A escolha entre ADO.NET, Dapper e Entity Framework Core depende das necessidades espec\u00edficas do seu sistema. Se o objetivo \u00e9 <strong>desempenho m\u00e1ximo<\/strong>, ADO.NET ou Dapper s\u00e3o as melhores op\u00e7\u00f5es. Se a <strong>facilidade de desenvolvimento<\/strong> for a prioridade, EF Core pode ser a melhor escolha.<\/p>\n\n\n\n<p>Cada tecnologia tem seu espa\u00e7o no ecossistema .NET, e muitas vezes uma combina\u00e7\u00e3o delas pode ser a melhor solu\u00e7\u00e3o para diferentes partes de um mesmo sistema.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1. ADO.NET<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">O que \u00e9?<\/h3>\n\n\n\n<p>ADO.NET \u00e9 a abordagem mais tradicional para acessar bancos de dados no .NET. Ele oferece APIs para executar comandos SQL diretamente e gerenciar conex\u00f5es de maneira eficiente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Vantagens<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Alto desempenho<\/strong>: Como n\u00e3o h\u00e1 camada intermedi\u00e1ria, \u00e9 a op\u00e7\u00e3o mais r\u00e1pida.<\/li>\n\n\n\n<li><strong>Total controle sobre consultas e conex\u00f5es<\/strong>.<\/li>\n\n\n\n<li><strong>Baixo consumo de mem\u00f3ria<\/strong>, pois n\u00e3o carrega objetos desnecess\u00e1rios.<\/li>\n\n\n\n<li><strong>Indicado para cen\u00e1rios onde o desempenho \u00e9 cr\u00edtico<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Desvantagens<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Mais c\u00f3digo boilerplate<\/strong>: Requer a escrita de consultas SQL manuais.<\/li>\n\n\n\n<li><strong>Manuten\u00e7\u00e3o complexa<\/strong>: C\u00f3digo mais verboso e propenso a erros.<\/li>\n\n\n\n<li><strong>Baixa produtividade<\/strong> em rela\u00e7\u00e3o a ORMs modernos.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de Uso<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using System;\nusing System.Data.SqlClient;\n\nclass Program\n{\n    static string connectionString = \"Server=myServer;Database=myDB;User Id=myUser;Password=myPassword;\";\n    \n    static void Main()\n    {\n        using (SqlConnection conn = new SqlConnection(connectionString))\n        {\n            conn.Open();\n            string query = \"SELECT * FROM Usuarios\";\n            using (SqlCommand cmd = new SqlCommand(query, conn))\n            using (SqlDataReader reader = cmd.ExecuteReader())\n            {\n                while (reader.Read())\n                {\n                    Console.WriteLine($\"{reader[\"Nome\"]} - {reader[\"Email\"]}\");\n                }\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Dapper<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">O que \u00e9?<\/h3>\n\n\n\n<p>Dapper \u00e9 um <strong>micro ORM<\/strong> desenvolvido pela equipe do Stack Overflow. Ele simplifica o acesso a bancos de dados sem perder o desempenho do ADO.NET.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Vantagens<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Mais r\u00e1pido que EF Core<\/strong>, pois n\u00e3o gerencia mudan\u00e7as no estado dos objetos.<\/li>\n\n\n\n<li><strong>Mais produtivo que ADO.NET<\/strong>, pois reduz a quantidade de c\u00f3digo necess\u00e1rio para consultas.<\/li>\n\n\n\n<li><strong>Facilidade de uso<\/strong> sem precisar de um modelo de dom\u00ednio completo.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Desvantagens<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Gerenciamento manual das consultas SQL<\/strong>, o que pode dificultar a manuten\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>Menos recursos que ORMs completos<\/strong>, como carregamento autom\u00e1tico de relacionamentos.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de Uso<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using Dapper;\nusing System.Data;\nusing System.Data.SqlClient;\n\npublic class UsuarioRepository\n{\n    private readonly string _connectionString = \"Server=myServer;Database=myDB;User Id=myUser;Password=myPassword;\";\n    \n    public IEnumerable&lt;Usuario> ObterTodos()\n    {\n        using (IDbConnection db = new SqlConnection(_connectionString))\n        {\n            return db.Query&lt;Usuario>(\"SELECT * FROM Usuarios\");\n        }\n    }\n}<\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Entity Framework Core (EF Core)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">O que \u00e9?<\/h3>\n\n\n\n<p>Entity Framework Core \u00e9 um <strong>ORM completo<\/strong> que abstrai o acesso ao banco de dados e permite mapear tabelas para objetos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Vantagens<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Facilidade de manuten\u00e7\u00e3o e produtividade<\/strong>.<\/li>\n\n\n\n<li><strong>Consultas mais seguras<\/strong> por evitar SQL injetado diretamente no c\u00f3digo.<\/li>\n\n\n\n<li><strong>Gerenciamento autom\u00e1tico do ciclo de vida dos objetos<\/strong>.<\/li>\n\n\n\n<li><strong>Suporte a LINQ<\/strong>, permitindo escrever consultas mais expressivas e leg\u00edveis.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Desvantagens<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Maior consumo de mem\u00f3ria e menor desempenho comparado ao ADO.NET e Dapper<\/strong>.<\/li>\n\n\n\n<li><strong>Curva de aprendizado maior<\/strong>, principalmente para quem n\u00e3o est\u00e1 familiarizado com ORMs.<\/li>\n\n\n\n<li><strong>Menos controle sobre otimiza\u00e7\u00f5es espec\u00edficas de banco de dados<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de Uso<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using Microsoft.EntityFrameworkCore;\n\npublic class AppDbContext : DbContext\n{\n    public DbSet&lt;Usuario> Usuarios { get; set; }\n\n    protected override void OnConfiguring(DbContextOptionsBuilder options)\n        => options.UseSqlServer(\"Server=myServer;Database=myDB;User Id=myUser;Password=myPassword;\");\n}\n\n\/\/ Consulta com LINQ\nusing (var db = new AppDbContext())\n{\n    var usuarios = db.Usuarios.ToList();\n    foreach (var usuario in usuarios)\n    {\n        Console.WriteLine($\"{usuario.Id}: {usuario.Nome} - {usuario.Email}\");\n    }\n}<\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quando Usar Cada Um?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ADO.NET<\/strong>: Quando o desempenho \u00e9 essencial e voc\u00ea precisa de total controle sobre as opera\u00e7\u00f5es no banco de dados. Ideal para sistemas legados e cen\u00e1rios cr\u00edticos de performance.<\/li>\n\n\n\n<li><strong>Dapper<\/strong>: Quando se deseja um equil\u00edbrio entre produtividade e performance. Indicado para aplica\u00e7\u00f5es que exigem consultas r\u00e1pidas e personalizadas.<\/li>\n\n\n\n<li><strong>Entity Framework Core<\/strong>: Quando a produtividade e a facilidade de manuten\u00e7\u00e3o s\u00e3o mais importantes do que a performance bruta. Ideal para aplica\u00e7\u00f5es com estrutura complexa e mudan\u00e7as frequentes no modelo de dados.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Compara\u00e7\u00e3o Direta<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Crit\u00e9rio<\/th><th>ADO.NET<\/th><th>Dapper<\/th><th>EF Core<\/th><\/tr><tr><td><strong>C\u00f3digo Boilerplate<\/strong><\/td><td>Alto<\/td><td>M\u00e9dio<\/td><td>Baixo<\/td><\/tr><tr><td><strong>Desempenho<\/strong><\/td><td>Alto<\/td><td>Alto<\/td><td>M\u00e9dio<\/td><\/tr><tr><td><strong>Facilidade de Uso<\/strong><\/td><td>Baixa<\/td><td>M\u00e9dia<\/td><td>Alta<\/td><\/tr><tr><td><strong>Produtividade<\/strong><\/td><td>Baixa<\/td><td>M\u00e9dia<\/td><td>Alta<\/td><\/tr><tr><td><strong>Controle sobre SQL<\/strong><\/td><td>Total<\/td><td>Alto<\/td><td>Baixo<\/td><\/tr><tr><td><strong>Manuten\u00e7\u00e3o<\/strong><\/td><td>Dif\u00edcil<\/td><td>M\u00e9dia<\/td><td>F\u00e1cil<\/td><\/tr><tr><td><strong>Curva de Aprendizado<\/strong><\/td><td>M\u00e9dia<\/td><td>M\u00e9dia<\/td><td>Alta<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n<p>Views: 0<\/p>","protected":false},"excerpt":{"rendered":"<p>Ao trabalhar com acesso a banco de dados em C#, tr\u00eas abordagens principais s\u00e3o frequentemente consideradas: ADO.NET, Dapper e Entity [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":374,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[49],"tags":[62,195,198],"class_list":["post-371","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacao","tag-c","tag-dapper","tag-entity-framework"],"_links":{"self":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/posts\/371","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=371"}],"version-history":[{"count":0,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/posts\/371\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/media\/374"}],"wp:attachment":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=371"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}