Пользовательские версии SQLite
Microsoft.Data.Sqlite
создается на основе SQLitePCLRaw
. Чтобы использовать настраиваемые версии нативной библиотеки SQLite, примените пакет или настройте поставщик SQLitePCLRaw
.
Наборы
SQLitePCLRaw
предоставляет пакеты, которые упрощают применение правильных зависимостей на разных платформах. Основной пакет Microsoft.Data.Sqlite
по умолчанию добавляет SQLitePCLRaw.bundle_e_sqlite3
. Чтобы использовать другой пакет, установите вместо него пакет Microsoft.Data.Sqlite.Core
и нужный пакет. Пакеты автоматически инициализируются пакетом Microsoft.Data.Sqlite
.
Набор | Description |
---|---|
SQLitePCLRaw.bundle_e_sqlite3 | Предоставляет согласованные версии SQLite для всех платформ. Включает расширения FTS4, FTS5, JSON1 и R*Tree. Это значение по умолчанию. |
SQLitePCLRaw.bundle_e_sqlcipher | Предоставляет неофициальную сборку SQLCipher с открытым кодом. |
SQLitePCLRaw.bundle_green | Аналогично bundle_e_sqlite3 , за исключением платформы iOS, где используется системная библиотека SQLite. |
SQLitePCLRaw.bundle_sqlite3 | Использует системную библиотеку SQLite. |
SQLitePCLRaw.bundle_winsqlite3 | Использует winsqlite3.dll , то есть системную библиотеку SQLite на платформе Windows 10. |
SQLitePCLRaw.bundle_zetetic | Использует официальные сборки SQLCipher , предоставляемые Zetetic (не входят в пакет). |
Например, следующие команды позволяют применить неофициальную сборку SQLCipher
с открытым кодом:
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
Доступные поставщики SQLitePCLRaw
Если нет желания использовать пакет, вы можете использовать доступные поставщики SQLite с основной сборкой.
Provider | Description |
---|---|
SQLitePCLRaw.provider.dynamic | Поставщик dynamic загружает собственную библиотеку вместо использования атрибутов System.Runtime.InteropServices.DllImportAttribute. Дополнительные сведения об использовании этого динамического поставщика см. в этом разделе. |
SQLitePCLRaw.provider.e_sqlite3 | e_sqlite3 является поставщиком по умолчанию. |
SQLitePCLRaw.provider.e_sqlcipher | Поставщик e_sqlcipher — это неофициальная и неподдерживаемая реализация SQLCipher . |
SQLitePCLRaw.provider.sqlite3 | Поставщик sqlite3 — это предоставляемая системой реализация SQLite для iOS, macOS и Linux. |
SQLitePCLRaw.provider.sqlcipher | Поставщик sqlcipher предназначен для использования официальных сборок SQLCipher , предоставляемых Zetetic . |
SQLitePCLRaw.provider.winsqlite3 | Поставщик winsqlite3 предназначен для сред Windows 10. |
Чтобы использовать поставщик sqlite3
, примените следующие команды:
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.core
dotnet add package SQLitePCLRaw.provider.sqlite3
После установки пакетов настройте экземпляр sqlite3
в качестве поставщика.
using Microsoft.Data.Sqlite;
using System;
namespace SqliteProviderSample
{
class Program
{
static void Main()
{
SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3());
using var connection = new SqliteConnection();
Console.WriteLine($"System SQLite version: {connection.ServerVersion}");
}
}
}
Использование динамического поставщика
Вы можете использовать собственную сборку SQLite, применяя пакет SQLitePCLRaw.provider.dynamic_cdecl
. В этом случае вы обязаны самостоятельно развернуть нативную библиотеку вместе с приложением. Обратите внимание, что процедура развертывания нативных библиотек вместе с приложением будет существенно различаться на разных платформах .NET и в разных средах выполнения.
Прежде всего нужно реализовать IGetFunctionPointer
. Ниже приведены сведения о такой реализации на .NET Core.
class NativeLibraryAdapter : IGetFunctionPointer
{
readonly IntPtr _library;
public NativeLibraryAdapter(string name)
=> _library = NativeLibrary.Load(name);
public IntPtr GetFunctionPointer(string name)
=> NativeLibrary.TryGetExport(_library, name, out var address)
? address
: IntPtr.Zero;
}
Теперь настройте поставщик SQLitePCLRaw
. Это нужно сделать до того, как в приложении будет использоваться Microsoft.Data.Sqlite
. Также постарайтесь не использовать пакет SQLitePCLRaw
, который может переопределить ваш поставщик.
SQLite3Provider_dynamic_cdecl
.Setup("sqlite3", new NativeLibraryAdapter("sqlite3"));
SQLitePCL.raw.SetProvider(new SQLite3Provider_dynamic_cdecl());