Каковы различия между System.Data.SQLite и Microsoft.Data.Sqlite?

Я понимаю, что System.Data.SQLite старше и получил поддержку .NETStandard после Microsoft.Data.Sqlite, но теперь оба они поддерживают .NETStandard 2.

Каковы преимущества одного над другим?

17
bsagal 20 Авг 2018 в 17:54

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 для регистрации пользовательских функций - лучший пример этого».

20
timanderson 26 Авг 2018 в 10:57

Я попробовал System.Data.SQLite и Microsoft.Data.SQLite в проекте, и я делаю реальный тест производительности, System.Data.SQLite примерно в 3 раза быстрее, чем Microsoft.Data.Sqlite при массовой вставке.

5
shine 27 Окт 2019 в 08:06

Еще одно открытие, на сегодняшний день (6 марта 2020 г.), System.Data.SQLite не предоставляет скомпилированный двоичный файл для linux arm. Вы должны сделать это вручную.

0
Ravi M Patel 5 Мар 2020 в 20:35
51933421