NavigationPropertyNameForeignKeyDiscoveryConvention
описывает, как свойство навигации в Student находит FK, объявленный в Student. AFAIK, он не будет рассматривать что-либо настроенное в сущности Classroom.
Он будет использовать тип и ссылочное имя, поэтому будет искать ClassroomId или MyClassroomId. Это часто приводит к тому, что люди, которые хотят использовать несколько ссылок на одну и ту же сущность, имеют одно свойство навигации, соответствующее имени типа. Т.е. CustomerId / Customer Customer и CreatedById / Customer CreatedBy. EF может попытаться преобразовать CreatedBy в CustomerId в зависимости от типа.
Само свойство навигации объединит ссылку на любое поле, объявленное как PK в типе класса. Удаление атрибута [Key]
в cId в классе не будет работать, поскольку это не соответствует правилам PK. (Id или ClassroomId) Это также не учитывает FK, то есть размещение столбца cId в Student, скорее всего, не будет отображаться на ссылку MyClassroom.
Лично я всегда использую явное отображение для отношений, и я избегаю объявлять свойства FK, вместо этого отдавая предпочтение свойствам теней / Map()
. Если вы собираетесь использовать соглашения, то ваша схема должна быть настроена на их соответствие без особых случаев. Самое простое и удобочитаемое - использовать {TableName} + Id для ссылок на PK и FK. Исключением являются множественные ссылки на одну и ту же таблицу / сущность, затем используются описательные имена для ссылок и связанных с ними FK. Т.е. CreatedBy + CreatedById и OrderingCustomer + OrderingCustomerId вместо Customer + CustomerId, если оба свойства навигации должны были указывать на сущность Customer.