繁体   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