Код структуры сущностей первая двусторонняя навигация один-к-одному - PullRequest
0 голосов
/ 26 июня 2018

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

Итак, давайте настроим пример. Представьте себе автомобильные двигатели и автомобили. Автомобильный двигатель может существовать без автомобиля, а автомобиль может существовать без автомобильного двигателя. Автомобильный двигатель может быть установлен в автомобиле (опционально), а в автомобиле может установлен автомобильный двигатель (опционально). Я хочу, чтобы у меня была возможность LoadAsync связать автомобиль, когда у меня есть автомобильный двигатель (если имеется), и связанный с ним двигатель автомобиля, когда у меня есть автомобиль (если имеется).

Как видите, я не могу реализовать это с использованием принципала и зависимой сущности.

Сущности должны выглядеть примерно так:

public class Car
{
    [Key]
    public string SN { get; set; }
    public string Plate { get; set; }

    public string IncludedEngineId { get; set; }
    [ForeignKey("IncludedEngineId")]
    public virtual Engine IncludedEngine { get; set; }
}

public class Engine
{
    [Key]
    public string SN { get; set; }
    public int CC { get; set; }

    public string PlacedInCarId { get; set; }
    [ForeignKey("PlacedInCarId")]
    public virtual Car PlacedInCar { get; set; }
}

Однако, если я сделаю это, автомобиль C1 может иметь IncludedEngineId E1, но E1 может быть PlacedInCarId C2! Это не создает «спаривания» между C1 и E1.

Есть ли способ реализовать это с помощью аннотаций? Если нет, есть ли способ использовать свободный API? Или я должен реализовать это как бизнес-логику?

1 Ответ

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

Похоже, что это своего рода циклическая ссылка между двумя таблицами, и надеюсь, что EF не поддерживает эту функцию ... либо вам нужно создать отдельную таблицу для обоих, либо выполнить кодирование для этой работы get.

...