Pular para conteúdo

ADO.NET

  • Arquitetura de acesso a dados para a plataforma .net Framework (recorte anterior ao .net core)
  • Fundamentalmente construído para conexão com bancos de dados relacionais
  • Implementação básica de acesso a tabelas, stored procedures, views, comandos de texto
  • Permitia utilização desconectada de banco de dados
  • Fundamentos arquiteturais e classes do namespace System.Data são a base de acesso a dados relacionais
  • Fabricantes de drivers acesso a dados relacionais para .net implementam, em geral, uma parte dos seguintes conceitos:
  • DbDataSource, DbProviderFactory - Caracterização do driver, capacidades, nomes seguros
  • Connection, Connection String, ConnectionFactory - Conexão, Cache de Conexões, Tolerância a falha, Configuração de conexão, Setup de conexões, Utilização de Configurações para conexões de dados
  • Command, CommandBuilder, Command Parameters - Para construção, cache, execução de comandos
  • DataTableMapping, DataColumnMapping - Para informações sobre schema. Aplicável a SBGD relacionais

  • O namespace System.Data.Common é o principal conjunto de classes necessáris para fabricantes implementarem seus próprios drivers de acesso

  • Bibliotecas como Entity Framework, Ef Core, MongoDB, Dapper, LinqToDb são implementadas em seus próprios pacotes.
  • Aspectos de acesso a bancos de dados não relacionais não são diretamente suportados pela arquitetura ADO.net. Sendo suportados de maneira independente e não padronizada por cada driver de fabricante

  • As API mais rápidas do ADO utilizam live forward-only cursors. Ou seja:

  • A iteração e fetch de cada registro é feito linha a linha diretamente sobre a fonte de dados.
  • Não é possível obter o registro anterior, apenas o atual e o próximo
  • Só é possível saber a quantidade de registros retornado por uma consulta após a última iteração sobre o cursor de registros.
  • Caso o transaction mode da consulta seja prolixo, é possível obter registros envolvidos numa transação ainda não concluída.

SQL Mappers

  • A execução de comandos (DbCommand) retorna um tipo primitivo, uma lista (IDataRecord uma coluna) ou uma matriz (IDataRecord)
  • Estas estruturas podem ser utilizadas diretamente ou convertidas numa representação mais conveniente para a aplicação. Esta é uma operação de mapeamento. Mapeamentos manuais são trabalhosos e, em geral, não são a opção viável para mapeamento de IDataRecord para um ou mais dto. Opções bastante sofisiticadas com performance equivalente ao mapeamento manual, em geral utilizam os seguintes patterns:
  • tipos primitivos da BCL
  • IList<> para listas de uma única coluna
  • POCO (equivalente de POJO) como abstração preferencial.

Entity Framework, EfCore

Dapper

Linq2Db