Question SQLite PRAGMA foreign_keys
-
22-07-2019 - |
Question
J'ai modifié System.Data.SQLite pour utiliser une version récente du moteur SQLite . qui applique automatiquement les clés étrangères sans utiliser de déclencheurs personnalisés.
J'utilise également SubSonic 2.x, mais cela s'appliquerait vers n'importe quel frameworks ORM utilisant SQLite et qui sont 'ouverts tard le matin'
Comment garantissez-vous que l'instruction 'PRAGMA foreign_keys = true' est appelée à chaque SQLiteConnection.Open ()? Il doit être appelé ou les clés étrangères ne fonctionnent pas.
La solution
Pour résoudre ce problème, j'ai ajouté une propriété 'Foreign Keys' à ConnectionString dans la classe SQLiteConnection.
Clés étrangères = ON Touches étrangères = OFF
Autres conseils
Vous n'avez pas besoin de modifier System.Data.SQLite si vous souhaitez utiliser la dernière version de SQLite, utilisez simplement la version ManagedOnly de System.Data.SQLite, puis remplacez uniquement sqlite3.dll par la dernière version. Pour activer le support de clé étrangère, j'exécute simplement une instruction SQL qui active le support de clé étrangère. par exemple
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();