SQLite-net-extensions, дублирующие дочерние объекты

У меня есть вопрос, касающийся SQLite-net-extensions. Надеюсь, что кто-нибудь может мне помочь, так как я немного отчаялся по этому поводу. У меня есть два класса, которые связаны отношениями многие-к-одному: TodoItem и Devices. Каждый TodoItem может содержать несколько устройств; но одно устройство может быть настроено только в одном TodoItem.

При чтении базы данных я сначала прочитал таблицу TodoItem с помощью метода (GetAllWithChildren) и заметил, что TodoItem имеет список KnxDevices. Отлично. Но затем я прочитал таблицу Devices, и она также имеет свойство TodoItem. Отлично.

Однако TodoItem в устройстве не соответствует ни одному объекту в списке TodoItems, он является его копией (если я изменяю свойство TodoItem в устройстве, соответствующий TodoItem в таблице TodoItem не изменяется).

Есть ли способ в SQLite-net-extensions читать таблицу, но без дублирования связанных объектов?

Это мой класс устройства:

public class Device
{
    private string description;
    private Status status;
    private Supplied supplied;
    private TodoItem task;

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

    public string Description
    {
        get
        {
            return this.description;
        }
        set
        {
            if (this.description != value)
            {
                this.description = value;
                NotifyPropertyChanged("Description");
            }
        }
    }
    public Status Status
    {
        get
        {
            return this.status;
        }
        set
        {
            if (this.status != value)
            {
                this.status = value;
                NotifyPropertyChanged("Status");
            }
        }
    }
    public Supplied Supplied
    {
        get
        {
            return this.supplied;
        }
        set
        {
            if (this.supplied != value)
            {
                this.supplied = value;
                NotifyPropertyChanged("Supplied");
            }
        }
    }

    [ForeignKey(typeof(TodoItem))]
    public int TaskId { get; set; }
    [ManyToOne]
    public TodoItem Task
    {
        get
        {
            return this.task;
        }
        set
        {
            if (this.task != value)
            {
                this.task = value;
                NotifyPropertyChanged("Task");
            }
        }
    }

}

Это класс TodoItem:

public class TodoItem
{

    string name;
    string description = "";
    List<Device> _devices = new List<Device>();

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

    public string Name
    {
        get
        {
            return this.name;
        }
        set
        {
            if (this.name != value)
            {
                this.name = value;
                NotifyPropertyChanged("Name");
            }
        }
    }
    public string Description 
    {
        get
        {
            return this.description;
        }
        set
        {
            if (this.description != value)
            {
                this.description = value;
                NotifyPropertyChanged("Description");
            }
        }
    }

    [OneToMany(CascadeOperations = CascadeOperation.All)]      // One to many relationship with Device
    public List<Device> Devices
    {
        get
        {
            return this._devices;
        }
        set
        {
            if (this._devices != value)
            {
                this._devices = value;
                NotifyPropertyChanged("Devices");
            }
        }
    }                   
}

0 ответов

Другие вопросы по тегам