2013-06-26 153 views
2

實際上,我正在開發使用SQLite數據庫的Windows metro應用程序。我使用sqlite管理器(mozilla)進行管理。我試圖刪除級聯,但它只是在sqlite的經理不是在C#代碼工作:SQLite級聯刪除

我的功能


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#代碼只刪除調查表不同時(調查和SurveyItemGroup)

PS:我有與編譯指示相同的問題(pragma foreign_keys=ON;)它只適用於我這樣做sq精簡版經理。

+0

我試圖只使用sqlite3命令行界面(在Ubuntu 12.04下的sqlite3命令)重現您的問題,並且我發現級聯刪除與'PRAGMA foreign_keys = ON'一起使用,但不能與'PRAGMA foreign_keys = OFF '。 –

+0

這可能是一個與您使用的特定sqlite版本有關的問題http://stackoverflow.com/questions/10719425/foreign-key-constraint-on-delete-cascade-not-working-in-sqlite-database- onro礦是3.7.9 –

+1

#馬爾科謝謝你的回答...我終於解決了我的問題。實際上,pragma_foreign = ON;必須在每個數據庫連接之後完成,如下所示: public async任務 DeleteSurvey(int SurveyID) { string result = string.Empty; var db = new SQLite.SQLiteAsyncConnection(App.DBPath); var survey = await GetSurvey(SurveyID); var survey = await GetSurvey(SurveyID); var pragma =等待db.executeAsync(「PRAGMA foreign_keys = ON」); var res = await db.DeleteAsync(survey); } – Bedine

回答

4

(我加入這個答案,因爲OP指出這是他的解決辦法,但只有在了評語)

目前,ON DELETE CASCADE工作,pragma foreign_keys=on;必須每個新的連接發行。它是not currently持久設置。