2013-06-26 3 views
2

en fait je développe l'application Windows Metro en utilisant SQLite DataBase. J'utilise sqlite manager (mozilla) pour l'administration. J'ai essayé une suppression en cascade, mais il ne travaille que dans le gestionnaire sqlite pas dans le code C#:SQLite Cascade Supprimer

Ma fonction


public async Task<string> DeleteSurvey(int SurveyID) 
{ 
    string result = string.Empty; 
    var db = new SQLite.SQLiteAsyncConnection(App.DBPath); 
    var survey = await GetSurvey(SurveyID); 
    var res = await db.DeleteAsync(survey); 

    if (res > 0) 
     result = "Success"; 
    else 
     result = "Echec"; 

    return result; 
} 

db.CreateTable<Survey>(); 

SQLiteCommand command1 = new SQLiteCommand(db); 
command1.CommandText = "create table if not exists SurveyItemGroup"; 
command1.CommandText += "(ID integer primary key autoincrement not null, IDSurvey integer,"; 
command1.CommandText += "Number integer, Name varchar(50), FOREIGN KEY(IDSurvey) REFERENCES Survey(ID) ON DELETE CASCADE ON UPDATE CASCADE)"; 
command1.ExecuteNonQuery(); 

Dans le code C# il supprimer seule table d'enquête non à la fois (Enquête et SurveyItemGroup)

PS: J'ai le même problème avec pragma (pragma foreign_keys=ON;) cela fonctionne seulement si je le fais sq gestionnaire Lite.

+0

J'ai essayé de reproduire votre problème en utilisant uniquement l'interface de ligne de commande sqlite3 (commande sqlite3 sous Ubuntu 12.04), et je l'ai trouvé la suppression en cascade fonctionne avec 'PRAGMA FOREIGN_KEYS = ON' mais ne fonctionne pas avec' PRAGMA FOREIGN_KEYS = OFF '. –

+0

Il peut s'agir d'un problème lié à la version de sqlite que vous utilisez http://stackoverflow.com/questions/10719425/foreign-key-constraint-on-delete-cascade-not-working-in-sqlite-database- on-andro Mine est 3.7.9 –

+1

#Marcello merci pour votre réponse ... J'ai enfin résolu mon problème. En fait, pragma_foreign = ON; doit être effectué avant chaque connexion à la base de données, comme suit: public async Tâche DeleteSurvey (int SurveyID) { chaîne result = chaîne.Empty; var db = new SQLite.SQLiteAsyncConnection (App.DBPath); var survey = wait GetSurvey (SurveyID); var pragma = await db.executeAsync ("PRAGMA foreign_keys = ON"); var res = wait db.DeleteAsync (enquête); } – Bedine

Répondre

4

(j'ajoute cette réponse parce que l'OP a noté cela comme sa solution, mais seulement dans un commentaire.)

Actuellement, pour ON SUPPRIMER CASCADE pour travailler, pragma foreign_keys=on; doit être délivré à chaque nouvelle connexion . C'est not currently un paramètre persistant.