Versiones personalizadas de SQLite
Microsoft.Data.Sqlite
se basa en SQLitePCLRaw
. Se pueden usar versiones personalizadas de la biblioteca SQLite nativa usando una agrupación o configurando un proveedor de SQLitePCLRaw
.
Agrupaciones
SQLitePCLRaw
proporciona paquetes de agrupación prácticos que hacen que sea muy fácil incorporar las dependencias adecuadas en distintas plataformas. De forma predeterminada, el paquete principal de Microsoft.Data.Sqlite
incluye SQLitePCLRaw.bundle_e_sqlite3
. Para usar otra agrupación, instale el paquete Microsoft.Data.Sqlite.Core
en su lugar junto con el paquete de agrupación que quiera usar. Microsoft.Data.Sqlite
inicializa las agrupaciones automáticamente.
Agrupación | Descripción |
---|---|
SQLitePCLRaw.bundle_e_sqlite3 | Proporciona la misma versión de SQLite en todas las plataformas. Incluye las extensiones FTS4, FTS5, JSON1 y R*Tree. Este es el valor predeterminado. |
SQLitePCLRaw.bundle_e_sqlcipher | Proporciona una compilación de código abierto no oficial de SQLCipher . |
SQLitePCLRaw.bundle_green | Igual que bundle_e_sqlite3 , salvo en iOS, donde usa la biblioteca SQLite del sistema. |
SQLitePCLRaw.bundle_sqlite3 | Usa la biblioteca SQLite del sistema. |
SQLitePCLRaw.bundle_winsqlite3 | Usa winsqlite3.dll , la biblioteca SQLite del sistema en Windows 10. |
SQLitePCLRaw.bundle_zetetic | Usa las compilaciones de SQLCipher oficiales de Zetetic (no se incluye). |
Por ejemplo, para usar la compilación de código abierto no oficial de SQLCipher
, use los siguientes comandos.
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
Proveedores de SQLitePCLRaw disponibles
Cuando no se basa en un paquete, puede usar los proveedores disponibles de SQLite con el ensamblado principal.
Proveedor | Descripción |
---|---|
SQLitePCLRaw.provider.dynamic | El proveedor de dynamic carga la biblioteca nativa en lugar de utilizar los atributos de System.Runtime.InteropServices.DllImportAttribute. Para obtener más información sobre el uso de este proveedor, vea el uso del proveedor dinámico. |
SQLitePCLRaw.provider.e_sqlite3 | e_sqlite3 es el proveedor predeterminado. |
SQLitePCLRaw.provider.e_sqlcipher | El proveedor e_sqlcipher es el SQLCipher no oficial y no compatible. |
SQLitePCLRaw.provider.sqlite3 | El proveedor sqlite3 es un elemento SQLite proporcionado por el sistema para iOS, macOS y Linux. |
SQLitePCLRaw.provider.sqlcipher | El proveedor sqlcipher es para las compilaciones SQLCipher oficiales de Zetetic . |
SQLitePCLRaw.provider.winsqlite3 | El proveedor winsqlite3 es para entornos de Windows 10. |
Para usar el proveedor sqlite3
, use los comandos siguientes:
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.core
dotnet add package SQLitePCLRaw.provider.sqlite3
Con los paquetes instalados, establezca el proveedor en la instancia de 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}");
}
}
}
Uso del proveedor dinámico
Para usar su propia compilación de SQLite, use el paquete SQLitePCLRaw.provider.dynamic_cdecl
. En este caso, será su responsabilidad implementar la biblioteca nativa con la aplicación. Tenga en cuenta que los detalles de la implementación de bibliotecas nativas con su aplicación variarán considerablemente en función de la plataforma .NET y del runtime que use.
En primer lugar, deberá implementar IGetFunctionPointer
. La implementación en .NET Core es la siguiente:
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;
}
A continuación, configure el proveedor SQLitePCLRaw
. Asegúrese de llevar esto a cabo antes de que Microsoft.Data.Sqlite
se use en la aplicación. Evite también usar un paquete de agrupación de SQLitePCLRaw
, lo que podría invalidar el proveedor.
SQLite3Provider_dynamic_cdecl
.Setup("sqlite3", new NativeLibraryAdapter("sqlite3"));
SQLitePCL.raw.SetProvider(new SQLite3Provider_dynamic_cdecl());