Domanda SQL_ PRysMA foreign_keys
-
22-07-2019 - |
Domanda
Ho modificato System.Data.SQLite per utilizzare una versione recente del SQLite che impone automaticamente le chiavi esterne senza utilizzare trigger personalizzati.
Sto anche usando SubSonic 2.x ma questo si applica a tutti i ORM che utilizzano SQLite che sono "aperti fino a chiudere molto presto".
Come assicureresti che l'istruzione 'PRAGMA foreign_keys = true' sia chiamata su ogni SQLiteConnection.Open ()? Deve essere chiamato o le chiavi esterne non funzionano.
Soluzione
Per risolvere questo problema, ho aggiunto una proprietà "Chiavi esterne" a ConnectionString nella classe SQLiteConnection.
Chiavi esterne = ON Chiavi esterne = OFF
Altri suggerimenti
Non è necessario modificare System.Data.SQLite se si desidera utilizzare l'ultima versione di SQLite, è sufficiente utilizzare la versione ManagedOnly di System.Data.SQLite e quindi sostituire solo sqlite3.dll con l'ultima versione. Per abilitare il supporto di chiave esterna eseguo semplicemente un'istruzione sql che abilita il supporto di chiave esterna. per es.
string databasePath = "Your database path here";
string connectionString = "Data Source=" + databasePath;
connection = new SQLiteConnection(connectionString);
connection.Open();
const string sqlString = "PRAGMA foreign_keys = ON;";
SQLiteCommand command = new SQLiteCommand(sqlString, connection);
command.ExecuteNonQuery();