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精簡版經理。
我試圖只使用sqlite3命令行界面(在Ubuntu 12.04下的sqlite3命令)重現您的問題,並且我發現級聯刪除與'PRAGMA foreign_keys = ON'一起使用,但不能與'PRAGMA foreign_keys = OFF '。 –
這可能是一個與您使用的特定sqlite版本有關的問題http://stackoverflow.com/questions/10719425/foreign-key-constraint-on-delete-cascade-not-working-in-sqlite-database- onro礦是3.7.9 –
#馬爾科謝謝你的回答...我終於解決了我的問題。實際上,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