Сопоставить свойство навигации и его целочисленный внешний ключ в Fluent API - PullRequest
0 голосов
/ 27 февраля 2020

Мы работаем с 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 идея, как отобразить свойство навигации и его целочисленный внешний ключ, чтобы они работали вместе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...