在与 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
的对象。要么使用其他插入方法,要么手动分配主键。
在使用 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
的对象。要么使用其他插入方法,要么手动分配主键。