使用SQLite-Net扩展以One-to-One关系自动设置实体密钥

时间:2016-10-17 10:14:14

标签: c# entity-framework xamarin sqlite-net 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与Project表中的Id(ForeignKey)相同。

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

但是,在持久化Project之后,ProjectSettings表中的ProjectID为0。 我使用database.InsertOrReplaceWithChildren(project)持久化项目。调用此方法时,Project和ProjectSetting都具有Id = 0。

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

1 个答案:

答案 0 :(得分:1)

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