Мы работаем с EF, codefirst, отображение выполняется через Fluent.API. Сопоставление обычных свойств не является проблемой.
Например, это сопоставление для таблицы StateHistory, оно имеет отношение 1: 1 к таблице ReasonOfChange, где ReasonOfChange является необязательным
HasOptional(t => t.ReasonOfChange)
.WithOptionalDependent(x => x.StateHistory)
.Map(m => m.MapKey("ReasonOfChange_Id")
.HasColumnAnnotation("ReasonOfChange_Id", "Index", new IndexAnnotation(new IndexAttribute() { IsUnique = true })))
.WillCascadeOnDelete(false).
(Может быть, это выглядит странно, уникальный индекс обрабатывается позже, есть условие where, добавленное)
Свойство в классе StateHistory:
public virtual DomainNs.ReasonOfChange ReasonOfChange { get; set; }
Проблема в том, что мы также хотел бы добавить ReasonOfChange_Id из-за проблем с производительностью. (если вы хотите проверить в linq2 sql, если StateHistory.ReasonOfChange == null, он генерирует безумный и медленный sql, вместо того, чтобы просто проверять StateHistory.ReasonOfChange_Id IS NULL - что может быть легко обработано с необходимым индексом в БД)
Как сначала попытался добавить в класс:
public virtual int? ReasonOfChange_Id { get; set; }
и простое отображение
Property(t => t.ReasonOfChange_Id);
Это хорошо работает при отладке, но если я пытаюсь сгенерировать мою следующую миграцию скрипт выдает ошибку:
ReasonOfChange_Id: Name: каждое имя свойства в типе должно быть уникальным. Имя свойства 'ReasonOfChange_Id' уже определено.
Пробовал много вещей, был также случай, когда его добавляли в скрипт миграции и добавление столбца ReasonOfChange_Id1.
Any идея, как отобразить свойство навигации и его целочисленный внешний ключ, чтобы они работали вместе?