Я новичок в LiteDB, но мой первый опыт довольно многообещающий. Теперь у меня есть следующая проблема. У меня есть C# классы, которые структурированы следующим образом (упрощенно):
public class Employee
{
public int EmployeeId {get;set;}
public string Name {get;set;}
public DateTime BirthDate {get;set;}
// The parent
public Company Company {get;set;}
}
public class Company
{
public int CompanyId {get;set;}
public string Name {get;set;}
// The children
public List<Employee> Employees {get;internal set;}
}
, то есть Employee
имеет ссылку на компанию, к которой они принадлежат. Я не могу сразу создать коллекцию компаний LiteDB, так как это дает рекурсивную ссылку. Поэтому мне нужно [BsonIgnore]
сверх Company
в классе Employee
:
public class Employee
{
public int EmployeeId {get;set;}
public string Name {get;set;}
public DateTime BirthDate {get;set;}
[BsonIgnore]
public Company Company {get;set;}
}
Очевидно, что нет необходимости иметь дополнительную коллекцию сотрудников, поскольку они уже хранятся в компаниях. Теперь, если я все еще хочу найти индивидуума Employee
, скажем, по его идентификатору, мне сначала нужно найти Company
, а затем Employee
в нем.
Чтобы реализовать его прямым Линком Оператор будет неудобным, особенно если коллекция становится большой, поэтому я ввел коллекцию пар ссылок {EmployeeId, CompanyId}
, где ключ EmployeeId
. Если я теперь хочу найти сотрудника, я могу сначала найти CompanyId
из справочной коллекции, а затем найти сотрудника в нем по EmployeeId
.
Это, однако, связано с тем, что мне приходится постоянно управлять коллекцией ссылок (вставка, обновление, удаление). В этом примере это, вероятно, будет управляемо, но мой настоящий проект включает не два иерархических уровня, а четыре, где каждый уровень имеет своих родителей и потомков, поэтому вся система вскоре перестает быть простой.
Есть ли лучшая идея, как эффективно хранить иерархические структуры таких и подобных типов с LiteDB / C#
?