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