0

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

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 имеют оба значения Id = 0 при вызове этого метода.

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

ответ

1

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

Смежные вопросы