EF Core - создание двух навигационных свойств, сопоставленных с одним обратным свойством - PullRequest
0 голосов
/ 20 ноября 2018

У меня настроены следующие объекты.

public class Car
{
    public int Id { get; protected set; }
    public HashSet<Wheel> FrontWheels { get; set; };
    public HashSet<Wheel> RearWheels { get; set; };
}

public class Wheel
{
    public int Id { get; protected set; }
    //public Car Car { get; set; }
    public double Diameter { get; set; }
    public double Width { get; set; }
}

Автомобиль имеет колеса.Он взаимодействует с фронтами и творится очень по-разному, и поэтому они хранятся в разных коллекциях.Колесо само по себе не является ни передним, ни задним (это может быть либо), но только благодаря его ассоциации с автомобилем ему присваивается положение на автомобиле.

Я могу настроить это в EFCore 2.1 с использованием следующей конфигурации:

    modelBuilder.Entity<Car>().HasMany(car => car.FrontWheels).WithOne();
    modelBuilder.Entity<Car>().HasMany(car => car.RearWheels).WithOne();

Это создает таблицу колес с двумя обнуляемыми столбцами fk, CarIdFrontWheel & CarIdRearWheel.Я понимаю, почему он создает два столбца и почему они обнуляются (для каждого ряда колес будет заполнен только 1 столбец fk, и этот столбец описывает положение на автомобиле).Эта схема описывает ситуацию, и я доволен этим.

Теперь проблема начинается, когда я хочу добавить обратно в закомментированное свойство обратной навигации - чтобы я мог перемещаться от Колеса к подключенному автомобилю.Однако я настраиваю его, EF всегда хочет добавить еще один fk с именем CarId в таблицу Wheel, чтобы отобразить обратно на автомобиль.Я понимаю, почему это нужно сделать - иначе я пытаюсь попросить одно свойство (Wheel.Car) принять участие в двух отношениях.Оба fks могут указывать на разные идентификаторы автомобилей и т. Д.

Однако то, что я спрашиваю, представляется логически обоснованным с точки зрения отношений сущностей.Если бы мы писали этот доступ к данным вручную, мы могли бы заставить схему работать без этого ненужного (несколько ненормализованного) третьего внешнего ключа.

  • Возможно ли настроить эти объекты, используя только два (CarIdFrontWheel& CarIdRearWheel) внешние ключи?
  • Должен ли я вместо этого просто принять существование внешнего ключа CarId?
  • Или я могу внести некоторые изменения в свою модель, чтобы помочь в этой ситуации?
...