В каждом отдельном месте, где я до сих пор искал, все отношения один-к-одному в структуре сущности имеют основную и зависимую сущность. То, что я хочу, - это отношения один-к-одному между двумя основными объектами.
Итак, давайте настроим пример. Представьте себе автомобильные двигатели и автомобили. Автомобильный двигатель может существовать без автомобиля, а автомобиль может существовать без автомобильного двигателя. Автомобильный двигатель может быть установлен в автомобиле (опционально), а в автомобиле может установлен автомобильный двигатель (опционально). Я хочу, чтобы у меня была возможность 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? Или я должен реализовать это как бизнес-логику?