[英]SQLite extension for xamarin.forms : delete on cascade not working, but the the code compiles with no errors
我正在使用 SQLiteNetExtensions 創建從一個表到另一個表的外鍵,以便我可以在級聯上刪除。 我遵循了以下文檔: https://bitbucket.org/twincoders/sqlite-net-extensions ,
但是當我刪除任務表上的記錄時,位置表中引用該主鍵的記錄不會被刪除,
我錯過了什么嗎?
這些是我的表:
using SQLiteNetExtensions.Attributes;
public class Locations
{
[PrimaryKey, AutoIncrement]
public int locationId { get; set; }
[ForeignKey(typeof(Missions))]
public int missionId { get; set; }
}
和 :
using SQLiteNetExtensions.Attributes;
public class Missions
{
[PrimaryKey, AutoIncrement]
public int missionId { get; set; }
public String missionName { get; set; }
[OneToMany(CascadeOperations = CascadeOperation.CascadeDelete)]
public List<Locations> Locations { get; set; }
}
這也是用於從任務表中刪除記錄的刪除方法:
public Task<int> DeleteMyMissionAsync(Missions myMission)
{
return database.DeleteAsync(myMission);
}
有什么方法可以檢查 SQLite 擴展中的這個屬性在做什么? 我的代碼編譯並運行,所以我不知道錯誤在哪里。
我還嘗試添加“使用 SQLiteNetExtensionsAsync”,但這沒有任何區別。
編輯:將我的刪除方法更改為:
public Task DeleteMyMissionAsync(Models.MyCreatedMissions myMission)
{
return database.DeleteAsync(myMission, recursive: true);
}
它運行但是當我刪除我的 Locations 表引用的 Missions 表中的一條記錄時,它只會刪除該記錄並且 Locations 表中引用該記錄的所有記錄仍然存在。
有任何想法嗎?
它有效,請確保您傳遞給 SQLiteNetExtensions.Extensions.WriteOperations.DeleteAll(..) 函數的對象中包含所有子對象。
調用應該是這樣的
SQLiteNetExtensions.Extensions.WriteOperations.DeleteAll(db, new Missions[] { missionsObj}, true);
在此任務中,Obj.Locations 不能為空且計數不能為零
如果你能得到這樣的 Missions 對象就更好了
SQLiteNetExtensions.Extensions.ReadOperations.GetAllWithChildren<Missions>(db, null, true);
所以它會得到它所有的孩子,所以你可以把這個任務對象傳遞給上面的刪除方法。 它應該工作
PS:假設一對多關系的所有屬性都設置正確
我在 Xamarin.Forms 中使用 SQLiteAsyncConnection 的單例實例,但無論如何不得不調用“PRAGMA foreign_keys=ON;” 在每次 DeleteAsync 調用之前。 打開連接后調用一次對我不起作用。 不需要 SQLiteNetExtensions 庫來克服級聯刪除“問題”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.