在与 SQLite-Net 扩展的一对一关系中自动设置 entitykey

Automatically set entitykey in One-to-One relationship with SQLite-Net extensions

在使用 SQLite-Net 扩展的 Xamarin 项目中,我有两个实体:Project 和 ProjectSettings。这些实体具有一对一的关系。 Project 实体有一个自动递增的 Id。当我最初保存一个项目时,项目的 Id 是自动设置的。这工作正常。

public class Project
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }

    [OneToOne(CascadeOperations = CascadeOperation.All)]
    public ProjectSettings Settings { get; set; }
}

对于 ProjectSettings,我希望 ProjectId 与项目 table (ForeignKey) 中的 Id 相同。

public class ProjectSettings
{
    [PrimaryKey, ForeignKey(typeof(Project))]
    public int ProjectId { get; set; }
}

但是,持久化项目后,ProjectSettings table 中的 ProjectID 为 0。 我正在使用 database.InsertOrReplaceWithChildren(project) 坚持该项目。调用此方法时,Project 和 ProjectSettings 的 Id=0。

由于我是 SQLite-Net 的新手,我想知道我是否错误地使用了注释,或者是否需要手动步骤才能正确设置 ProjectSettings 的键?

您不能将 InsertOrReplace 与带有 SQLite.Net 的 AutoIncrement 主键一起使用。它将始终覆盖 ID 为 0 的对象。要么使用其他插入方法,要么手动分配主键。