EF Core 3.0 1: 0 отношения с свободно

EF Core 3.0 ... Я не могу найти точный ответ для этого совершенно нормального отображения.
Принципал-Зависимый без обратного указателя на Принципал, отношение 1: 0, настроена таблица Тип / Поиск. Проблема в том, что имя ключа объекта «RunId» отличается от имени ключа, сгенерированного EFCore, «ServiceRunId»

Как я могу использовать Fluent API для замены аннотации [ForeignKey ("aServiceRun")]?

Это моя текущая настройка Fluent, но я не знаю, где разместить сопоставление ForeignKey.

aBuilder.Entity <ServiceRun> (). HasKey (новая строка [] {"RunId"});

aBuilder.Entity <Service> (). HasOne (s => s.aServiceRun);


Class Service {        
  public int ServiceId {get; set;}

  [ForeignKey("aServiceRun")]
  public int RunId { get; set; }

  public virtual ServiceRun aServiceRun { get; set; }
}

Class ServiceRun {
  public int RunId { get; set; }

  public string description {get ;set; }
}

Таблицы:

Service {
  ServiceId int

  RunId int
}

SerivceRun {
  RunId int

  Description string
}

Всего 1 ответ


Как я могу использовать Fluent API для замены [ForeignKey("aServiceRun")] ?

Вы ищете свободный API HasForeignKey . Но для того, чтобы получить доступ к нему (и другим API-интерфейсам конфигурации отношений), вам нужно определить отношение с помощью Has{One|Many} за которым следует With{One|Many} . Для отношений один-к-одному также необходимо предоставить аргумент универсального типа для HasForeignKey :

При настройке отношений с помощью Fluent API вы используете методы HasOne и WithOne .

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

Обратите внимание, что объект, содержащий FK, всегда является зависимым , поэтому в вашей модели ServiceRun является основным, Service является зависимым, и свободная конфигурация выглядит следующим образом:

modelBuilder.Entity<Service>()
    .HasOne(s => s.aServiceRun) // navigation property
    .WithOne() // no navigation property
    .HasForeignKey<Service>(s => s.RunId); // foreign key

Есть идеи?

10000