Автоматически устанавливать ключ сущности в отношениях «один к одному» с расширениями SQLite-Net.

В проекте Xamarin с использованием расширений SQLite-Net у меня есть две сущности: Project и ProjectSettings. Эти сущности имеют отношение один к одному. Сущность Project имеет автоматически увеличивающийся идентификатор. Когда я изначально сохраняю проект, идентификатор проекта устанавливается автоматически. Это работает нормально.

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

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

Для ProjectSettings я ожидаю, что ProjectId будет таким же, как Id в таблице Project (ForeignKey).

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

Однако ProjectID в таблице ProjectSettings равен 0 после сохранения проекта. Я сохраняю проект, используя database.InsertOrReplaceWithChildren(project). Project и ProjectSettings имеют идентификатор = 0 при вызове этого метода.

Поскольку я новичок в SQLite-Net, мне интересно, неправильно ли я использую аннотации или необходимы ручные шаги для правильной установки ключа ProjectSettings?


person Dominic    schedule 17.10.2016    source источник


Ответы (1)


Вы не можете использовать InsertOrReplace с первичным ключом AutoIncrement с SQLite.Net. Он всегда будет переопределять объект с идентификатором 0. Либо используйте другой метод вставки, либо вручную назначьте первичный ключ.

person redent84    schedule 17.10.2016