Pregunta SQLite PRAGMA Foreign_keys
-
22-07-2019 - |
Pregunta
Modifiqué System.Data.SQLite para usar una versión reciente del motor SQLite que aplica automáticamente claves foráneas sin usar activadores personalizados.
También estoy usando SubSonic 2.x pero esto se aplicaría a cualquier ORM marcos que utilizan SQLite que están 'abiertos tarde, cierran temprano'.
¿Cómo se aseguraría de que se invoque la declaración 'PRAGMA foreign_keys = true' en cada SQLiteConnection.Open ()? Tiene que llamarse o las claves externas no funcionan.
Solución
Para solucionar esto, agregué una propiedad 'Claves foráneas' a ConnectionString en la clase SQLiteConnection.
Teclas extranjeras = ON Claves foráneas = OFF
Otros consejos
No necesita modificar System.Data.SQLite si desea usar la última versión de SQLite, solo use la versión ManagedOnly de System.Data.SQLite y luego reemplace el sqlite3.dll con la última versión. Para habilitar el soporte de clave externa, simplemente ejecuto una instrucción sql que habilita el soporte de clave externa. por ejemplo,
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();