Каковы различия между System.Data.SQLite и Microsoft.Data.Sqlite?
Я понимаю, что System.Data.SQLite старше и получил поддержку .NETStandard после Microsoft.Data.Sqlite, но теперь оба они поддерживают .NETStandard 2.
Каковы преимущества одного над другим?
3 ответа
Преимущество System.Data.SQLite заключается в том, что он разработан командой SQLite, которая взяла на себя долгосрочное обязательство поддерживать его.
Преимущество Microsoft.Data.Sqlite состоит в том, что он разработан Microsoft и может быть хорошо протестирован с Entitity Framework, .NET Core и т. Д.
Я выбрал System.Data.SQLite для своего проекта, одной из причин которого является использование метода GetBytes () DataReader, который «не поддерживается» в Microsoft.Data.Sqlite.
Я не тестировал производительность, однако меня не удивит, если Microsoft.Data.Sqlite выиграет, поскольку он претендует на то, чтобы быть более тонкой оболочкой. См. ниже.
Вот информативный комментарий Бриса Ламбсона, одного из разработчиков Microsoft.Data.Sqlite:
https://www.bricelam.net/2018/05/24/microsoft-data-sqlite-2-1.html#comment-3980760585
Он говорит: «Есть три основных различия между Microsoft.Data.Sqlite и System.Data.SQLite.
«Во-первых, мы не стремимся быть полнофункциональным провайдером ADO.NET. Microsoft.Data.Sqlite был создан для .NET Core 1.0, когда целью было создание более легкой, модернизированной версии .NET. .NET Core в основном отказались в пользу добавления как можно большего количества API-интерфейсов, чтобы упростить перенос из других сред выполнения .NET. Однако цель Microsot.Data.Sqlite по-прежнему состоит в том, чтобы просто обеспечить базовую реализацию ADO.NET. достаточно для поддержки современных сред доступа к данным, таких как EF Core, Dapper и т. д. Мы не склонны добавлять API для того, что можно сделать с помощью SQL.Например, см. этот комментарий для альтернатив SQL для ключевых слов строки подключения.
«Второе большое отличие заключается в том, что мы намного ближе к нативному поведению SQLite. Мы не пытаемся компенсировать причуды SQLite. Например, System.Data.SQLite добавляет семантику .NET к именам типов столбцов. Они даже необходимо проанализировать каждый оператор SQL перед отправкой его в собственный драйвер, чтобы обработать пользовательский оператор SQL для указания типа столбца результатов, не поступающих непосредственно из столбца таблицы (т. е. выражений в предложении SELECT). Вместо этого мы учитываем тот факт, что SQLite поддерживает только четыре примитивных типа (INTEGER, REAL, TEXT и BLOB) и реализует API-интерфейсы ADO.NET таким образом, чтобы помочь вам привести значения между этими типами и типами .NET.
«Наконец, мы не были написаны 10 лет назад. :-) Это позволяет нам создавать более современные API, которые кажутся более естественными в современном идиоматическом C #. API для регистрации пользовательских функций - лучший пример этого».
Я попробовал System.Data.SQLite и Microsoft.Data.SQLite в проекте, и я делаю реальный тест производительности, System.Data.SQLite примерно в 3 раза быстрее, чем Microsoft.Data.Sqlite при массовой вставке.
Еще одно открытие, на сегодняшний день (6 марта 2020 г.), System.Data.SQLite не предоставляет скомпилированный двоичный файл для linux arm. Вы должны сделать это вручную.
Похожие вопросы
Новые вопросы
.net
НЕ используйте для вопросов о .NET Core - используйте вместо этого [.net-core]. .NET Framework - это программная среда, предназначенная главным образом для операционной системы Microsoft Windows. Он включает в себя реализацию библиотеки базовых классов, общеязыковой среды выполнения (обычно называемой CLR), общей системы типов (обычно называемой CTS) и динамической среды исполнения. Он поддерживает множество языков программирования, включая C #, VB.NET, F # и C ++ / CLI.