Niestandardowe wersje programu SQLite

Microsoft.Data.Sqlitejest zbudowany na podstawie .SQLitePCLRaw Niestandardowe wersje natywnej biblioteki SQLite można używać przy użyciu pakietu lub przez skonfigurowanie dostawcy SQLitePCLRaw .

Wiązki

SQLitePCLRaw zapewnia pakiety pakietów oparte na wygodzie, które ułatwiają wprowadzanie odpowiednich zależności na różnych platformach. Microsoft.Data.Sqlite Główny pakiet jest domyślnie wprowadzanySQLitePCLRaw.bundle_e_sqlite3. Aby użyć innego pakietu, zainstaluj Microsoft.Data.Sqlite.Core pakiet wraz z pakietem, którego chcesz użyć. Pakiety są automatycznie inicjowane przez program Microsoft.Data.Sqlite.

Pakiet Opis
SQLitePCLRaw.bundle_e_sqlite3 Zapewnia spójną wersję sqLite na wszystkich platformach. Obejmuje rozszerzenia FTS4, FTS5, JSON1 i R*Tree. Jest to opcja domyślna.
SQLitePCLRaw.bundle_e_sqlcipher Udostępnia nieoficjalną, open source kompilację programu SQLCipher.
SQLitePCLRaw.bundle_green Taki sam jak bundle_e_sqlite3, z wyjątkiem systemu iOS, gdzie używa systemowej biblioteki SQLite.
SQLitePCLRaw.bundle_sqlite3 Używa systemowej biblioteki SQLite.
SQLitePCLRaw.bundle_winsqlite3 Używa winsqlite3.dllbiblioteki SQLite systemu w Windows 10.
SQLitePCLRaw.bundle_zetetic Używa oficjalnych SQLCipher kompilacji z Zetetic (nieuwzględnione).

Aby na przykład użyć nieoficjalnej kompilacji SQLCipher open source, użyj następujących poleceń.

dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher

Dostawcy dostępności SQLitePCLRaw

Jeśli nie polegasz na pakiecie, możesz użyć dostępnych dostawców SQLite z podstawowym zestawem.

Dostawca Opis
SQLitePCLRaw.provider.dynamic dynamic Dostawca ładuje bibliotekę natywną zamiast używać System.Runtime.InteropServices.DllImportAttribute atrybutów. Aby uzyskać więcej informacji na temat korzystania z tego dostawcy, zobacz używanie dostawcy dynamicznego.
SQLitePCLRaw.provider.e_sqlite3 Jest e_sqlite3 to domyślny dostawca.
SQLitePCLRaw.provider.e_sqlcipher Dostawca e_sqlcipher jest nieoficjalny i nieobsługiwany SQLCipher.
SQLitePCLRaw.provider.sqlite3 Dostawca sqlite3 jest dostarczany SQLite przez system dla systemów iOS, macOS i Linux.
SQLitePCLRaw.provider.sqlcipher Dostawca sqlcipher jest przeznaczony dla oficjalnych SQLCipher kompilacji z Zeteticprogramu .
SQLitePCLRaw.provider.winsqlite3 Dostawca winsqlite3 jest przeznaczony dla środowisk Windows 10.

Aby użyć dostawcy sqlite3 , użyj następujących poleceń:

dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.core
dotnet add package SQLitePCLRaw.provider.sqlite3

Po zainstalowaniu pakietów należy ustawić dostawcę na sqlite3 wystąpienie.

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}");
        }
    }
}

Używanie dostawcy dynamicznego

Możesz użyć własnej kompilacji SQLite, korzystając z SQLitePCLRaw.provider.dynamic_cdecl pakietu. W takim przypadku odpowiadasz za wdrożenie biblioteki natywnej za pomocą aplikacji. Uwaga: szczegóły wdrażania bibliotek natywnych w aplikacji różnią się znacznie w zależności od używanej platformy i środowiska uruchomieniowego platformy .NET.

Najpierw należy zaimplementować IGetFunctionPointerelement . Implementacja platformy .NET Core jest następująca:

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;
}

Następnie skonfiguruj dostawcę SQLitePCLRaw . Upewnij się, że zostało to zrobione przed Microsoft.Data.Sqlite rozpoczęciem użycia w aplikacji. Należy również unikać używania SQLitePCLRaw pakietu pakietu, który może zastąpić dostawcę.

SQLite3Provider_dynamic_cdecl
    .Setup("sqlite3", new NativeLibraryAdapter("sqlite3"));
SQLitePCL.raw.SetProvider(new SQLite3Provider_dynamic_cdecl());