Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Em 2005, Robert Simpson criou System.Data.SQLite, um provedor SQLite para ADO.NET 2.0. Em 2010, a equipe SQLite assumiu a manutenção e desenvolvimento do projeto. Também vale a pena notar que a equipa do Mono fez um fork do código em 2007 como Mono.Data.Sqlite. System.Data.SQLite tem uma longa história e evoluiu para um provedor de ADO.NET estável e completo, completo com ferramentas do Visual Studio. Novas versões continuam a enviar assemblies compatíveis com todas as versões do .NET Framework de volta à versão 2.0 e até mesmo ao .NET Compact Framework 3.5.
A primeira versão do .NET Core (lançada em 2016) foi uma implementação única, leve, moderna e multiplataforma do .NET. APIs obsoletas e APIs com alternativas mais modernas foram intencionalmente removidas. ADO.NET não incluiu nenhuma das APIs DataSet (incluindo DataTable e DataAdapter).
A equipe do Entity Framework estava um pouco familiarizada com a base de código System.Data.SQLite. Brice Lambson, um ex-membro da equipe EF, já havia ajudado a equipe SQLite a adicionar suporte para as versões 5 e 6 do Entity Framework. Brice também estava experimentando sua própria implementação de um provedor de ADO.NET SQLite na mesma época em que o .NET Core estava sendo planejado. Após uma longa discussão, a equipe do Entity Framework decidiu criar o Microsoft.Data.Sqlite com base no protótipo de Brice. Isso permitiria que eles criassem uma nova implementação leve e moderna que se alinharia com os objetivos do .NET Core.
Como um exemplo do que queremos dizer com mais moderno, aqui está o código para criar uma função definida pelo usuário em System.Data.SQLite e Microsoft.Data.Sqlite.
// System.Data.SQLite
connection.BindFunction(
new SQLiteFunctionAttribute("ceiling", 1, FunctionType.Scalar),
(Func<object[], object>)((object[] args) => Math.Ceiling((double)((object[])args[1])[0])),
null);
// Microsoft.Data.Sqlite
connection.CreateFunction(
"ceiling",
(double arg) => Math.Ceiling(arg));
Em 2017, o .NET Core 2.0 sofreu uma mudança de estratégia. Foi decidido que a compatibilidade com o .NET Framework era vital para o sucesso do .NET Core. Muitas das APIs removidas, incluindo as APIs DataSet, foram adicionadas de volta. Como aconteceu com muitos outros, este desbloqueio do System.Data.SQLite permitiu que ele também fosse portado para o .NET Core. O objetivo original do Microsoft.Data.Sqlite de ser leve e moderno, no entanto, ainda permanece. Consulte as limitações do ADO.NET para obter detalhes sobre as APIs do ADO.NET não implementadas pelo Microsoft.Data.Sqlite.
Quando novos recursos são adicionados ao Microsoft.Data.Sqlite, o design de System.Data.SQLite é levado em consideração. Tentamos, sempre que possível, minimizar as mudanças entre os dois para facilitar a transição entre eles.
Tipos de dados
A maior diferença entre Microsoft.Data.Sqlite e System.Data.SQLite é como os tipos de dados são tratados. Conforme descrito em Tipos de dados, Microsoft.Data.Sqlite não tenta ocultar a peculiaridade subjacente do SQLite, que permite que qualquer cadeia de caracteres arbitrária seja especificada como o tipo de coluna e tem apenas quatro tipos primitivos: INTEIRO, REAL, TEXT e BLOB.
System.Data.SQLite aplica semântica adicional a tipos de coluna mapeando-os diretamente para tipos .NET. Isso dá ao provedor uma sensação mais tipada de forma sólida, mas tem algumas imperfeições. Por exemplo, eles tiveram que introduzir uma nova instrução SQL (TYPES) para especificar os tipos de coluna de expressões em instruções SELECT.
Cadeias de conexão
Microsoft.Data.Sqlite tem muito menos cadeia de conexão palavras-chave. A tabela a seguir mostra alternativas que podem ser usadas em vez disso.
| Palavra-chave | Alternativa |
|---|---|
| Tamanho do cache | Enviar PRAGMA cache_size = <pages> |
| FailIfMissing | Utilize Mode=ReadWrite |
| FullUri | Usar a palavra-chave Data Source |
| Modo Diário | Enviar PRAGMA journal_mode = <mode> |
| Formato herdado | Enviar PRAGMA legacy_file_format = 1 |
| Contagem máxima de páginas | Enviar PRAGMA max_page_count = <pages> |
| Tamanho da página | Enviar PRAGMA page_size = <bytes> |
| Somente leitura | Utilize Mode=ReadOnly |
| Síncrono | Enviar PRAGMA synchronous = <mode> |
| Uri | Usar a palavra-chave Data Source |
| UseUTF16Codificação | Enviar PRAGMA encoding = 'UTF-16' |
Autorização
Microsoft.Data.Sqlite não tem nenhuma API que exponha o retorno de chamada de autorização do SQLite. Use o problema #13835 para fornecer comentários sobre esse recurso.
Notificações de alteração de dados
Microsoft.Data.Sqlite não tem nenhuma API expondo as notificações de alteração de dados do SQLite. Use o problema #13827 para fornecer comentários sobre esse recurso.
Módulos de tabela virtual
Microsoft.Data.Sqlite não tem nenhuma API para criar módulos de tabela virtual. Use o problema #13823 para fornecer comentários sobre esse recurso.