Эта проблема не имеет ничего общего с отложенной загрузкой и установщиком настраиваемых свойств, но конфликт между полем поддержки и именами свойств теневого FK.
При применении к свойству навигации атрибут ForeignKey
указывает свойство FK имя. Если такого свойства не существует, EF Core создаст теневое свойство с этим именем.
С авто-свойством вспомогательное поле name генерируется компилятором и является не "project"
, так что нет проблем. Но во втором случае уже есть поле с именем "project"
, поэтому EF Core решает, что это свойство FK, указанное атрибутом. Но, конечно, это не так, и также не является ожидаемым типом (Guid
или Guid?
), следовательно, исключение.
Если вы использовали обычные имена свойств / столбцов FK (например, ProjectId
) ), вам не понадобится этот атрибут, и у вас не будет проблем. Я уверен, что вас не заботит имя теневого свойства, а имя столбца таблицы.
Таким образом, один из способов решения этой проблемы - удалить атрибут ForeignKey
и использовать свободный API для настройки имени столбца FK:
private CoilProject project;
public virtual CoilProject Project
{
get { return project; }
set { project = value; /* Other code here */ }
}
и
modelBuilder.Entity<CoilUnit>()
.Property<Guid?>(nameof(CoilUnit.Project) + "Id")
.HasColumnName("project");
Другой способ - сохранить атрибут, но переименовать поле поддержки свойства навигации в один из других поддерживаемых шаблонов , например "_project"
:
private CoilProject _project;
[ForeignKey("project")]
public virtual CoilProject Project
{
get { return _project; }
set { _project = value; /* Other code here */ }
}