Sdílet prostřednictvím


Vlastní verze SQLite

Microsoft.Data.Sqliteje 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.Sqlitepomocí .

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_sqlite3v iOSu, kde používá systémovou knihovnu SQLite.
SQLitePCLRaw.bundle_sqlite3 Používá systémovou knihovnu SQLite.
SQLitePCLRaw.bundle_winsqlite3 Používá winsqlite3.dllsysté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());