Anpassade SQLite-versioner

Microsoft.Data.Sqlite bygger på SQLitePCLRaw. Du kan använda anpassade versioner av det interna SQLite-biblioteket med hjälp av ett paket eller genom att konfigurera en SQLitePCLRaw provider.

Buntar

SQLitePCLRaw tillhandahåller bekvämlighetsbaserade paketpaket som gör det enkelt att få in rätt beroenden på olika plattformar. Microsoft.Data.Sqlite Huvudpaketet tar in SQLitePCLRaw.bundle_e_sqlite3 som standard. Om du vill använda ett annat paket installerar Microsoft.Data.Sqlite.Core du paketet i stället tillsammans med det paketpaket som du vill använda. Paket initieras automatiskt av Microsoft.Data.Sqlite.

Bunt beskrivning
SQLitePCLRaw.bundle_e_sqlite3 Tillhandahåller en konsekvent version av SQLite på alla plattformar. Innehåller tilläggen FTS4, FTS5, JSON1 och R*Tree. Det här är standardinställningen.
SQLitePCLRaw.bundle_e_sqlcipher Tillhandahåller en inofficiell version med öppen källkod av SQLCipher.
SQLitePCLRaw.bundle_green Samma som bundle_e_sqlite3, förutom i iOS där systemets SQLite-bibliotek används.
SQLitePCLRaw.bundle_sqlite3 Använder systemets SQLite-bibliotek.
SQLitePCLRaw.bundle_winsqlite3 Använder winsqlite3.dll, system-SQLite-biblioteket i Windows 10.
SQLitePCLRaw.bundle_zetetic Använder de officiella SQLCipher byggena från Zetetic (ingår inte).

Till exempel, för att använda den inofficiella, open-source versionen av SQLCipher, använd följande kommandon.

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

Tillgängliga SQLitePCLRaw-leverantörer

När du inte förlitar dig på ett paket kan du använda tillgängliga SQLite-leverantörer med kärnsammansättningen.

Leverantör beskrivning
SQLitePCLRaw.provider.dynamic Providern dynamic läser in det interna biblioteket i stället för att använda System.Runtime.InteropServices.DllImportAttribute attribut. Mer information om hur du använder den här providern finns i Använda den dynamiska providern.
SQLitePCLRaw.provider.e_sqlite3 e_sqlite3 är standardprovidern.
SQLitePCLRaw.provider.e_sqlcipher Leverantören e_sqlcipher är den inofficiella och stöds inte av SQLCipher.
SQLitePCLRaw.provider.sqlite3 Providern sqlite3 är en systemleverantör som tillhandahålls SQLite för iOS, macOS och Linux.
SQLitePCLRaw.provider.sqlcipher Providern sqlcipher är för officiella SQLCipher versioner från Zetetic.
SQLitePCLRaw.provider.winsqlite3 Providern winsqlite3 är för Windows 10-miljöer.

Använd följande kommandon för att använda providern sqlite3 :

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

När paketen har installerats anger du sedan providern till instansen 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}");
        }
    }
}

Använd den dynamiska leverantören

Du kan använda din egen version av SQLite genom att använda SQLitePCLRaw.provider.dynamic_cdecl paketet. I det här fallet ansvarar du för att distribuera det interna biblioteket med din app. Observera att informationen om att distribuera interna bibliotek med din app varierar avsevärt beroende på vilken .NET-plattform och körning du använder.

Först måste du implementera IGetFunctionPointer. Implementeringen av .NET Core är följande:

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

Konfigurera sedan providern SQLitePCLRaw . Kontrollera att detta görs innan Microsoft.Data.Sqlite det används i din app. Undvik också att använda ett SQLitePCLRaw paketpaket som kan åsidosätta din provider.

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