Versi SQLite kustom
Microsoft.Data.Sqlite
dibangun di atas SQLitePCLRaw
. Anda dapat menggunakan versi kustom pustaka SQLite asli menggunakan bundel atau dengan mengonfigurasi penyedia SQLitePCLRaw
.
Bundel
SQLitePCLRaw
menyediakan paket bundel berbasis kenyamanan, yang memudahkan untuk membawa dependensi yang tepat di berbagai platform. Paket Microsoft.Data.Sqlite
utama membawa SQLitePCLRaw.bundle_e_sqlite3
secara default. Untuk menggunakan bundel yang berbeda, instal paket Microsoft.Data.Sqlite.Core
sebagai gantinya bersama dengan paket bundel yang ingin Anda gunakan. Bundel secara otomatis diinisialisasi oleh Microsoft.Data.Sqlite
.
Bundel | Deskripsi |
---|---|
SQLitePCLRaw.bundle_e_sqlite3 | Menyediakan versi SQLite yang konsisten di semua platform. Menyertakan ekstensi FTS4, FTS5, JSON1, dan R*Tree. Ini adalah default. |
SQLitePCLRaw.bundle_e_sqlcipher | Menyediakan build sumber terbuka yang tidak resmi dari SQLCipher . |
SQLitePCLRaw.bundle_green | Sama seperti bundle_e_sqlite3 , kecuali pada iOS di mana ia menggunakan pustaka SQLite sistem. |
SQLitePCLRaw.bundle_sqlite3 | Menggunakan sistem pustaka SQLite. |
SQLitePCLRaw.bundle_winsqlite3 | Menggunakan winsqlite3.dll , pustaka SQLite sistem pada Windows 10. |
SQLitePCLRaw.bundle_zetetic | Menggunakan build SQLCipher resmi dari Zetetic (tidak termasuk). |
Misalnya, untuk menggunakan build SQLCipher
sumber terbuka yang tidak resmi, gunakan perintah berikut.
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
Penyedia SQLitePCLRaw yang tersedia
Saat tidak mengandalkan bundel, Anda dapat menggunakan penyedia SQLite yang tersedia dengan perakitan inti.
Penyedia | Deskripsi |
---|---|
SQLitePCLRaw.provider.dynamic | Penyedia dynamic memuat pustaka asli alih-alih menggunakan atribut System.Runtime.InteropServices.DllImportAttribute. Untuk informasi selengkapnya tentang menggunakan penyedia ini, lihat menggunakan penyedia dinamis. |
SQLitePCLRaw.provider.e_sqlite3 | e_sqlite3 adalah penyedia default. |
SQLitePCLRaw.provider.e_sqlcipher | Penyedia e_sqlcipher adalah SQLCipher yang tidak resmi dan tidak didukung. |
SQLitePCLRaw.provider.sqlite3 | Penyedia sqlite3 adalah SQLite yang disediakan oleh sistem untuk iOS, macOS, dan Linux. |
SQLitePCLRaw.provider.sqlcipher | Penyedia sqlcipher adalah untuk build SQLCipher resmi dari Zetetic . |
SQLitePCLRaw.provider.winsqlite3 | Penyedia winsqlite3 adalah untuk lingkungan Windows 10. |
Untuk menggunakan penyedia sqlite3
, gunakan perintah berikut:
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.core
dotnet add package SQLitePCLRaw.provider.sqlite3
Dengan paket yang terinstal, Anda kemudian mengatur penyedia ke instans 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}");
}
}
}
Menggunakan penyedia dinamis
Anda dapat menggunakan build SQLite Anda sendiri dengan memanfaatkan paket SQLitePCLRaw.provider.dynamic_cdecl
. Dalam hal ini, Anda bertanggung jawab untuk menyebarkan pustaka asli dengan aplikasi Anda. Perhatikan, detail penyebaran pustaka asli menggunakan aplikasi Anda sangat bervariasi tergantung pada platform .NET dan runtime yang Anda gunakan.
Pertama, Anda harus menerapkan IGetFunctionPointer
. Implementasi pada Inti .NET adalah sebagai berikut:
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;
}
Selanjutnya, konfigurasikan penyedia SQLitePCLRaw
. Pastikan ini dilakukan sebelum Microsoft.Data.Sqlite
digunakan di aplikasi Anda. Selain itu, hindari menggunakan paket bundel SQLitePCLRaw
yang mungkin mengambil alih penyedia Anda.
SQLite3Provider_dynamic_cdecl
.Setup("sqlite3", new NativeLibraryAdapter("sqlite3"));
SQLitePCL.raw.SetProvider(new SQLite3Provider_dynamic_cdecl());