SQLite级联删除

本文关键字:删除 级联 SQLite | 更新日期: 2023-09-27 18:19:55

实际上,我正在使用SQLite数据库开发windows metro应用程序。我使用sqlitemanager(mozilla)进行管理。我尝试删除级联,但它只在sqlite管理器中有效,而在C#代码中无效:

我的功能


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();

在C#代码中,它只删除调查表,而不是同时删除(survey和SurveyItemGroup)

PS:我对pragma(pragma foreign_keys=ON;)也有同样的问题,只有当我使用sqlite-manager时它才能工作。

SQLite级联删除

(我之所以添加这个答案,是因为OP将此作为他的解决方案,但只是在注释中。)

目前,要使ON DELETE CASCADE工作,必须在每个新连接中发出pragma foreign_keys=on;。它目前不是一个持久设置。