Versioni di SQLite personalizzate
Microsoft.Data.Sqlite
è basato su SQLitePCLRaw
. È possibile usare versioni personalizzate della libreria SQLite nativa, usando un bundle o configurando un provider di SQLitePCLRaw
.
Aggregazioni
SQLitePCLRaw
fornisce pacchetti bundle basati sulla convenienza, che semplificano l'inserimento delle dipendenze corrette su piattaforme diverse. Il pacchetto principale Microsoft.Data.Sqlite
porta in SQLitePCLRaw.bundle_e_sqlite3
per impostazione predefinita. Per usare un bundle diverso, installare il pacchetto Microsoft.Data.Sqlite.Core
insieme al pacchetto bundle da usare. I bundle vengono inizializzati automaticamente da Microsoft.Data.Sqlite
.
Aggregazione | Descrizione |
---|---|
SQLitePCLRaw.bundle_e_sqlite3 | Fornisce una versione coerente di SQLite in tutte le piattaforme. Include le estensioni FTS4, FTS5, JSON1 e R*Tree. Si tratta dell'impostazione predefinita. |
SQLitePCLRaw.bundle_e_sqlcipher | Fornisce una compilazione open source non ufficiale di SQLCipher . |
SQLitePCLRaw.bundle_green | Come per bundle_e_sqlite3 , ma su iOS usa la libreria SQLite di sistema. |
SQLitePCLRaw.bundle_sqlite3 | Usa la libreria SQLite di sistema. |
SQLitePCLRaw.bundle_winsqlite3 | Usa winsqlite3.dll , la libreria SQLite di sistema in Windows 10. |
SQLitePCLRaw.bundle_zetetic | Usa le build ufficiali SQLCipher da Zetetic (non incluse). |
Ad esempio, per usare la build open-source non ufficiale di SQLCipher
, usare i comenti seguenti.
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
Provider disponibili SQLitePCLRaw
Quando non si fa affidamento su un bundle, è possibile usare i provider disponibili di SQLite con l'assembly principale.
Provider | Descrizione |
---|---|
SQLitePCLRaw.provider.dynamic | Il provider di dynamic carica la libreria nativa anziché usare gli attributi System.Runtime.InteropServices.DllImportAttribute. Per altre informazioni sull'uso di questo provider, vedere usare il provider dinamico. |
SQLitePCLRaw.provider.e_sqlite3 | e_sqlite3 è il provider predefinito. |
SQLitePCLRaw.provider.e_sqlcipher | Il provider di e_sqlcipher è la versione non ufficiale e non supportata di SQLCipher . |
SQLitePCLRaw.provider.sqlite3 | Il provider di sqlite3 è un SQLite fornito dal sistema per iOS, macOS e Linux. |
SQLitePCLRaw.provider.sqlcipher | Il provider di sqlcipher è destinato alle build ufficiali di SQLCipher da Zetetic . |
SQLitePCLRaw.provider.winsqlite3 | Il provider di winsqlite3 è destinato agli ambienti Windows 10. |
Per usare il provider di sqlite3
usare i comandi seguenti:
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.core
dotnet add package SQLitePCLRaw.provider.sqlite3
Dopo aver installato i pacchetti, impostare il provider sull'istanza di 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}");
}
}
}
Usare il provider dinamico
È possibile usare la propria build di SQLite sfruttando il pacchetto SQLitePCLRaw.provider.dynamic_cdecl
. In questo caso, l'utente è responsabile della distribuzione della libreria nativa con la propria app. Si noti che i dettagli della distribuzione delle librerie native con l'app variano notevolmente a seconda della piattaforma .NET e del runtime in uso.
Prima di tutto, è necessario implementare IGetFunctionPointer
. L'implementazione in .NET Core è la seguente:
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;
}
Configurare quindi il provider di SQLitePCLRaw
. Assicurarsi che questa operazione venga eseguita prima che Microsoft.Data.Sqlite
venga usato nell'app. Evitare inoltre di usare un pacchetto bundle SQLitePCLRaw
che potrebbe eseguire l'override del provider.
SQLite3Provider_dynamic_cdecl
.Setup("sqlite3", new NativeLibraryAdapter("sqlite3"));
SQLitePCL.raw.SetProvider(new SQLite3Provider_dynamic_cdecl());