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.