SQLite-Net Extensions |Внешний ключ Ссылка на тот же объект - PullRequest
0 голосов
/ 08 июня 2018

Возникла проблема с использованием расширений SQLite-Net для сохранения данных в локальной БД в сценарии, где внешний ключ ссылается на одну и ту же сущность (самостоятельное соединение).

Пример - Сотрудник и менеджер.У каждого сотрудника есть менеджер, а менеджер - тоже сотрудник.В таких случаях у меня возникают проблемы с сохранением данных.Будет очень полезно, если вы сможете дать некоторые идеи.Поддерживает ли это расширение такие отношения?

1 Ответ

0 голосов
/ 10 июня 2018

Да, отношения между объектами одного и того же класса поддерживаются, но внешние атрибуты и обратные свойства должны быть явно указаны в атрибуте свойства отношений, потому что система обнаружения ошибается, поскольку существуют два отношения с одним типом.

Этот пример извлечен из проекта readme:

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

    public string Name { get; set; }

    [ManyToMany(typeof(FollowerLeaderRelationshipTable), "LeaderId", "Followers",
        CascadeOperations = CascadeOperation.CascadeRead)]
    public List<TwitterUser> FollowingUsers { get; set; }

    // ReadOnly is required because we're not specifying the followers manually, but want to obtain them from database
    [ManyToMany(typeof(FollowerLeaderRelationshipTable), "FollowerId", "FollowingUsers",
        CascadeOperations = CascadeOperation.CascadeRead, ReadOnly = true)]
    public List<TwitterUser> Followers { get; set; }
}

// Intermediate class, not used directly anywhere in the code, only in ManyToMany attributes and table creation
public class FollowerLeaderRelationshipTable {
    public int LeaderId { get; set; }
    public int FollowerId { get; set; }
}

Как вы можете видеть здесь, у нас есть много ко многим между пользователями Twitter.В вашем случае это будет один ко многим, поэтому вам не понадобится промежуточная таблица и вам понадобится внешний ключ (например, ManagerId) в вашем классе Person.

...