Каков наилучший способ моделирования нескольких отношений «один к одному» с одной и той же таблицей (sqlite-net-extensions)? Я ищу такое решение:
Class WayBill
{
[PrimaryKey, AutoIncrement]
public int Id {get; set;}
[ForeignKey(typeof(Organization ))]
public int ConsignerId {get; set;}
[OneToOne]
public Organization Consigner {get; set;}
[ForeignKey(typeof(Organization ))]
public int ConsigneeId {get; set;}
[OneToOne]
public Organization Consignee {get; set;}
}
Class Organization
{
[PrimaryKey, AutoIncrement]
public int Id {get; set;}
public string Name {get; set;}
}
Очевидно, что вышеописанное не сработает.
Я рассматривал и другие варианты:
создайте таблицу (WayBillOrganization), отражающую роль организации: Накладная -->> WayBillOrganization --> Организация
поместите необходимые обратные свойства OneToMany в организацию.
Обрабатывайте вещи вручную (т.е. храните только первичные ключи в классе WayBill и загружайте организации отдельно).
Вариант 2. Это то, чего я хочу избежать. Организации связаны со многими другими классами (не в моем примере), и даже в случае с накладной есть еще несколько отношений, которые я не включил в пример (перевозчик, плательщик груза, экспедитор и т. д.). Кроме того, я бы предпочел использовать инверсные свойства только тогда, когда мне нужно перемещаться (например, я не использую организацию для поиска накладных, поэтому инверсное свойство — это только дополнительная нагрузка).
Вариант 3 тоже не так привлекателен.
Таким образом, вариант 1. кажется правильным. Но прежде чем идти туда, я хотел бы знать, действительно ли решение идеального мира в моем примере невозможно.
Итак, мой вопрос: есть ли способ смоделировать несколько однонаправленных отношений OneToOne без явно объявленных обратных свойств?