У меня есть объект, который уже используется с базовой базой данных, и он был создан только с навигационным свойством для необязательного объекта (1: 0..1). Таким образом, по соглашениям по умолчанию EF создал столбец внешнего ключа, допускающий значение NULL, в БД и дал ему имя «MyProp_Id» с подчеркиванием в соответствии с этим соглашением.
Теперь я хочу предоставить этот внешний ключ как свойство объекта, потому что это облегчит мне некоторые сценарии. Я не хочу переименовывать/изменять базовый столбец внешнего ключа в БД (MyProp_Id). На самом деле не должно быть никаких базовых обновлений БД, я просто хочу показать этот FK на объекте. Пример кода для пояснения:
public class MyEntityA
{
public long Id { get; set; }
//public long? MyOptionalEntityB_Id { get; set; } <== this is what I am trying to add
//public long? MyOptionalEntityBId { get; set; } <== this didn't work either
public MyEntityB MyOptionalEntityB { get; set; }
}
Я попытался просто добавить свойство «MyOptionalEntity_Id» в качестве свойства объекта, надеясь, что EF «автоматически» увидит, что, поскольку имена одинаковы, он просто сопоставит и будет счастлив. БЕЗ КУБИКОВ.
Затем я попытался назвать свое свойство «MyOptionalEntityId» (без подчеркивания), но по-прежнему NO DICE.
Затем я попытался добавить явную конфигурацию сопоставления, чтобы сказать:
this.Property(p => p.MyOptionalEntityId).HasColumnName("MyOptionalEntity_Id");
БЕЗ КУБИКОВ
Есть ли способ сделать это? Это понятно и имеет смысл?
HasForeignKey
иHasColumnName
вместе, что Джули имела в виду, насколько я понимаю, столбец FK в сущности не соответствует соглашение,‘<navigation property name><principal primary key property name>’, ‘<principal class name><primary key property name>’,
поэтому его необходимо настроить с атрибутомForeignKey
илиHasForeignKey
10.09.2014nameof
вместо того, чтобы вводить имена свойств. Таким образом, если вы переименуете свойство, сопоставление по-прежнему будет правильным. 14.09.2018