Delen via


Aangepaste SQLite-versies

Microsoft.Data.Sqlite is gebouwd op SQLitePCLRaw. U kunt aangepaste versies van de systeemeigen SQLite-bibliotheek gebruiken met behulp van een bundel of door een SQLitePCLRaw provider te configureren.

Pakketten

SQLitePCLRaw biedt pakketbundels gebaseerd op gemak, waarmee het gemakkelijk is om de juiste afhankelijkheden voor verschillende platformen in te brengen. Het hoofdMicrosoft.Data.Sqlitepakket bevat standaardSQLitePCLRaw.bundle_e_sqlite3. Om een ander pakket te gebruiken, installeer het Microsoft.Data.Sqlite.Core pakket samen met het pakket dat je wilt gebruiken. Bundels worden automatisch geïnitialiseerd door Microsoft.Data.Sqlite.

Bundel Beschrijving
SQLitePCLRaw.bundle_e_sqlite3 Biedt een consistente versie van SQLite op alle platforms. Bevat de FTS4, FTS5, JSON1 en R*Tree-extensies. Dit is de standaardinstelling.
SQLitePCLRaw.bundle_e_sqlcipher Biedt een niet-officiële, open-source versie van SQLCipher aan.
SQLitePCLRaw.bundle_green Hetzelfde als bundle_e_sqlite3, behalve op iOS waar het de system SQLite-bibliotheek gebruikt.
SQLitePCLRaw.bundle_sqlite3 Gebruikt de systeem SQLite-bibliotheek.
SQLitePCLRaw.bundle_winsqlite3 Gebruikt winsqlite3.dll, de systeem SQLite-bibliotheek op Windows 10.
SQLitePCLRaw.bundle_zetetic Gebruikt de officiële SQLCipher builds van Zetetic (niet inbegrepen).

Bijvoorbeeld, om de niet-officiële, open-source versie van SQLCipher te gebruiken, gebruik de volgende opdrachten.

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

SQLitePCLRaw beschikbare providers

Wanneer je niet op een bundel vertrouwt, kun je de beschikbare providers van SQLite gebruiken met de kernassemblage.

Aanbieder Beschrijving
SQLitePCLRaw.provider.dynamic De dynamic provider laadt de native bibliotheek in plaats van System.Runtime.InteropServices.DllImportAttribute attributen te gebruiken. Voor meer informatie over het gebruik van deze provider, zie gebruik de dynamische provider.
SQLitePCLRaw.provider.e_sqlite3 De e_sqlite3 is de standaardprovider.
SQLitePCLRaw.provider.e_sqlcipher De e_sqlcipher-aanbieder is de niet-officiële en niet-ondersteunde SQLCipher.
SQLitePCLRaw.provider.sqlite3 De sqlite3 provider is een systeem-voorziening SQLite voor iOS, macOS en Linux.
SQLitePCLRaw.provider.sqlcipher De provider sqlcipher is bedoeld voor officiële builds SQLCipher van Zetetic.
SQLitePCLRaw.provider.winsqlite3 De winsqlite3-provider is voor Windows 10-omgevingen.

Om de sqlite3 provider te gebruiken, gebruik de volgende commando's:

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

Nadat de pakketten zijn geïnstalleerd, stel je vervolgens de provider in op de sqlite3 instantie.

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

De dynamische provider gebruiken

U kunt uw eigen build van SQLite gebruiken door gebruik te maken van het SQLitePCLRaw.provider.dynamic_cdecl pakket. In dit geval bent u verantwoordelijk voor het implementeren van de systeemeigen bibliotheek met uw app. De details van het implementeren van systeemeigen bibliotheken met uw app variëren aanzienlijk, afhankelijk van het .NET-platform en de runtime die u gebruikt.

Eerst moet je IGetFunctionPointer implementeren. De implementatie op .NET Core is als volgt:

class NativeLibraryAdapter : IGetFunctionPointer
{
    readonly IntPtr _library;

    public NativeLibraryAdapter(string name)
        => _library = SQLitePCL.NativeLibrary.Load(name);

    public IntPtr GetFunctionPointer(string name)
        => SQLitePCL.NativeLibrary.TryGetExport(_library, name, out var address)
            ? address
            : IntPtr.Zero;
}

Vervolgens configureer je de SQLitePCLRaw provider. Zorg ervoor dat dit is gedaan voordat Microsoft.Data.Sqlite in uw app wordt gebruikt. Vermijd ook het gebruik van een SQLitePCLRaw bundelpakket dat uw provider mogelijk overschrijft.

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