簡體   English   中英

xamarin.forms 的 SQLite 擴展:刪除級聯不起作用,但代碼編譯沒有錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM