Сравнение с System.Data.SQLite
В 2005 году Роберт Симпсон создал System.Data.SQLite, поставщик SQLite для ADO.NET 2.0. В 2010 году сопровождение и развитие этого проекта взяла на себя команда SQLite. Стоит также упомянуть, что команда Mono в 2007 году создала ответвление этого кода Mono.Data.Sqlite. System.Data.SQLite имеет долгую историю, и теперь это стабильный и полнофункциональный поставщик ADO.NET, оснащенный инструментарием Visual Studio. В новых выпусках продолжают поставляться сборки, совместимые с каждой версией платформы .NET Framework, вплоть до старой версии 2.0 и даже .NET Compact Framework 3.5.
Первая версия .NET Core (выпущенная в 2016 году) была единой, облегченной, современной и кроссплатформенной реализацией .NET. Устаревшие API и API с более современными альтернативными вариантами были намеренно удалены. В ADO.NET не было никаких API DataSet (в том числе DataTable и DataAdapter).
Команда Entity Framework была в некоторой степени знакома с базой кода System.Data.SQLite. Брайс Ламбсон, участник команды EF, ранее помог команде SQLite добавить поддержку Entity Framework версий 5 и 6. Брайс также экспериментировал со своей собственной реализацией поставщика SQLite ADO.NET примерно в то же время, когда планировался .NET Core. После долгого обсуждения команда Entity Framework решила создавать Microsoft.Data.Sqlite на основе прототипа Брайса. Это позволило бы им создать новую облегченную и современную реализацию, которая соответствовала бы целям .NET Core.
В качестве примера того, что мы понимаем под более современной реализацией, посмотрите код создания пользовательской функции в System.Data.SQLite и в 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));
В 2017 году произошло изменение стратегии .NET Core 2.0. Было решено, что совместимость с .NET Framework жизненно важна для успеха .NET Core. Многие из удаленных API, включая API DataSet, были добавлены обратно. Помимо других интересных вещей, это разблокировало проект System.Data.SQLite и позволило также перенести его в .NET Core. Однако первоначальная цель создания облегченной и современной библиотеки Microsoft.Data.Sqlite осталась прежней. Подробные сведения об API ADO.NET, которые не реализованы в Microsoft.Data.Sqlite, см. в статье об ограничениях ADO.NET.
Когда в Microsoft.Data.Sqlite добавляются новые функции, всегда принимается во внимание проект System.Data.SQLite. Мы стараемся, когда это возможно, сводить к минимуму их различия, чтобы облегчить переход между ними.
Типы данных
Самая большая разница между Microsoft.Data.Sqlite и System.Data.SQLite заключается в способах обработки типов данных. Как описано в типах данных, Microsoft.Data.Sqlite не пытается скрыть базовую причудливость SQLite, которая позволяет указывать любую произвольную строку в качестве типа столбца, и имеет только четыре примитивных типа: INTEGER, REAL, TEXT и BLOB.
System.Data.SQLite применяет к типам столбцов дополнительную семантику, сопоставляя их непосредственно с типами .NET. Это придает поставщику ощущение более строгой типизации, но остаются некоторые шероховатости. Например, им пришлось ввести новую инструкцию SQL (TYPES) для указания типов столбцов выражений в инструкциях SELECT.
Строки подключения
В Microsoft.Data.Sqlite строка подключения имеет гораздо меньше ключевых слов. В следующей таблице показаны альтернативные варианты, которые можно использовать в качестве замены.
Ключевое слово | Альтернатива |
---|---|
Размер кэша | Отправьте PRAGMA cache_size = <pages> |
FailIfMissing | Использование Mode=ReadWrite |
FullUri | Используйте ключевое слово Data Source |
Journal Mode | Отправьте PRAGMA journal_mode = <mode> |
Legacy Format | Отправьте PRAGMA legacy_file_format = 1 |
Max Page Count | Отправьте PRAGMA max_page_count = <pages> |
Размер страницы | Отправьте PRAGMA page_size = <bytes> |
Только для чтения | Использование Mode=ReadOnly |
Синхронная | Отправьте PRAGMA synchronous = <mode> |
URI-адрес | Используйте ключевое слово Data Source |
UseUTF16Encoding | Отправьте PRAGMA encoding = 'UTF-16' |
Авторизация
В Microsoft.Data.SQLite нет API, соответствующего обратному вызову авторизации SQLite. Используйте вопрос #13835, чтобы отправить отзыв об этой функции.
Уведомления об изменениях данных
В Microsoft.Data.SQLite нет API, соответствующего уведомлениям об изменениях данных SQLite. Используйте вопрос #13827, чтобы отправить отзыв об этой функции.
Модули виртуальных таблиц
В Microsoft.Data.SQLite нет API для создания модулей виртуальных таблиц. Используйте вопрос #13823, чтобы отправить отзыв об этой функции.
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по