Vlastní verze SQLite
Microsoft.Data.Sqlite
je postaven na .SQLitePCLRaw
Vlastní verze nativní knihovny SQLite můžete použít pomocí sady prostředků nebo konfigurací SQLitePCLRaw
zprostředkovatele.
Sady
SQLitePCLRaw
poskytuje balíčky balíčků založených na pohodlí, které usnadňují přenesení správných závislostí na různých platformách. Microsoft.Data.Sqlite
Hlavní balíček se ve výchozím nastavení vrátíSQLitePCLRaw.bundle_e_sqlite3
. Pokud chcete použít jinou sadu, nainstalujte Microsoft.Data.Sqlite.Core
balíček společně s balíčkem, který chcete použít. Svazky jsou automaticky inicializovány Microsoft.Data.Sqlite
pomocí .
Sada | Popis |
---|---|
SQLitePCLRaw.bundle_e_sqlite3 | Poskytuje konzistentní verzi SQLite na všech platformách. Zahrnuje rozšíření FTS4, FTS5, JSON1 a R*Tree. Tato možnost je výchozí. |
SQLitePCLRaw.bundle_e_sqlcipher | Poskytuje neoficiální opensourcové sestavení SQLCipher . |
SQLitePCLRaw.bundle_green | Stejné jako bundle_e_sqlite3 v iOSu, kde používá systémovou knihovnu SQLite. |
SQLitePCLRaw.bundle_sqlite3 | Používá systémovou knihovnu SQLite. |
SQLitePCLRaw.bundle_winsqlite3 | Používá winsqlite3.dll systémovou knihovnu SQLite ve Windows 10. |
SQLitePCLRaw.bundle_zetetic | Používá oficiální SQLCipher buildy ze Zetetic (nezahrnuté). |
Pokud například chcete použít neoficiální opensourcové SQLCipher
sestavení, použijte následující příkazy.
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
Poskytovatelé dostupných služeb SQLitePCLRaw
Pokud se nespoléháte na sadu, můžete použít dostupné zprostředkovatele SQLite se základním sestavením.
Poskytovatel | Popis |
---|---|
SQLitePCLRaw.provider.dynamic | dynamic Zprostředkovatel místo atributů načte nativní knihovnuSystem.Runtime.InteropServices.DllImportAttribute. Další informace o použití tohoto zprostředkovatele najdete v tématu použití dynamického zprostředkovatele. |
SQLitePCLRaw.provider.e_sqlite3 | Jedná se e_sqlite3 o výchozího zprostředkovatele. |
SQLitePCLRaw.provider.e_sqlcipher | Poskytovatel e_sqlcipher je neoficiální a nepodporovaný SQLCipher . |
SQLitePCLRaw.provider.sqlite3 | Poskytovatel sqlite3 je systém poskytovaný SQLite pro iOS, macOS a Linux. |
SQLitePCLRaw.provider.sqlcipher | Poskytovatel sqlcipher je určen pro oficiální SQLCipher buildy z Zetetic . |
SQLitePCLRaw.provider.winsqlite3 | Poskytovatel winsqlite3 je pro prostředí Windows 10. |
K použití sqlite3
zprostředkovatele použijte následující příkazy:
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.core
dotnet add package SQLitePCLRaw.provider.sqlite3
S nainstalovanými balíčky pak nastavíte zprostředkovatele na sqlite3
instanci.
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}");
}
}
}
Použití dynamického zprostředkovatele
Pomocí balíčku můžete použít vlastní build SQLite SQLitePCLRaw.provider.dynamic_cdecl
. V takovém případě zodpovídáte za nasazení nativní knihovny s vaší aplikací. Všimněte si, že podrobnosti o nasazení nativních knihoven s vaší aplikací se výrazně liší v závislosti na tom, jakou platformu .NET a modul runtime používáte.
Nejprve budete muset implementovat IGetFunctionPointer
. Implementace v .NET Core je následující:
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;
}
Dále nakonfigurujte SQLitePCLRaw
zprostředkovatele. Před používáním v aplikaci se ujistěte, že se to dělá Microsoft.Data.Sqlite
. Vyhněte se také použití SQLitePCLRaw
balíčku sady, který může přepsat vašeho poskytovatele.
SQLite3Provider_dynamic_cdecl
.Setup("sqlite3", new NativeLibraryAdapter("sqlite3"));
SQLitePCL.raw.SetProvider(new SQLite3Provider_dynamic_cdecl());