2015-08-12 3 views
5

Ich bin auf der Suche nach einer Möglichkeit zur Aktivierung bei Verwendung der System.Data.SQLite Wrapper für SQLite.Aktivieren Sie den gemeinsamen Cache-Modus in System.Data.Sqlite (. NET)

Ich habe für dieses Projekt den Quellcode durchgesehen, und sehen, dass es an die Montage intern ausgesetzt ist in UnsafeNativeMethods.cs als:

internal static extern SQLiteErrorCode sqlite3_enable_shared_cache(
    int enable); 

Leider kann ich bei dieser Methode bekommen nicht, da es intern.

Hat jemand eine Lösung dafür?


Antworten wurden am meisten geschätzt. Vielen Dank!

FYI, wenn die SQLiteConnectionStringBuilder API verwenden, aktivieren Sie den gemeinsam genutzten Cache von:

var builder = new SQLiteConnectionStringBuilder(); 
... 
builder.Add("cache", "shared"); 

Antwort

2

SQLite verwendet PRAGMA-Anweisungen die modifizieren Datenbankoperationen. Diese Anweisungen sind spezifisch für SQLite. PRAGMA-Anweisungen können von der Aktivierung von Fremdschlüsseln über die Änderung von Schemaversionen bis hin zur Einstellung der Shared-Cache-Optionen reichen (Eine vollständige Liste von Pragma-Befehlen ist verfügbar. ) Mit Pragma-Anweisungen sind mir zwei Möglichkeiten bekannt, sie auszuführen; 1), wenn die Verbindungszeichenfolge wird instanziiert wird oder 2) geladen als Befehl

1) während der Instanziierung

new SQLiteConnection("Data Source=c:\mydb.db;Version=3;cache=shared"); 

2) Separate Befehl Pragma-Anweisungen können wie jeder normale Datenbankbefehl sqliteConnection.Open ausgeführt werden();

var cmd = new SQLiteCommand("PRAGMA cache=shared",sqliteConnection); 
cmd.ExecuteNonQuery(); 

Ein weiterer Wert Frage einen Blick: SQLite SharedCache MultiThread Reads

5

Sie können die gemeinsam genutzten Cache ermöglichen, in der Verbindungszeichenfolge:

var connection = new SQLiteConnection("FullUri=file:mydb.sqlite?cache=shared"); 
Verwandte Themen