EF 6 один-к-одному со свойствами навигации и свойством внешнего ключа - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть отношение один-к-одному / нулю, работающее с использованием EF 6. По сути, у меня есть объект LocationItem, который может или не может быть связан с объектом Scale, а объект Scale может или не может быть связан с Объект LocationItem. Таблица LocationItem содержит внешний ключ (называемый ScaleId) для таблицы Scale.

Я использую следующий свободный API в классе LocationItem.

HasOptional(x => x.Scale)
   .WithOptionalDependent(x => x.LocationItem)
   .Map(x => x.MapKey("ScaleId"));

Затем у меня есть свойство навигации LocationItem в классе Scale и свойство навигации Scale в классе LocaitonItem. Как я уже сказал, все это работает.

У меня проблема в том, что мне нужно включить ScaleId в качестве свойства класса LocationItem. Я попытался добавить поле в POCO

public int? ScaleId { get; set; }

и сопоставьте его в конфигурации

Property(x => x.ScaleId).HasColumnName("ScaleId");

Но если я это сделаю, я получаю следующую ошибку проверки

ScaleId: Name: каждое имя свойства в типе должно быть уникальным. Имя свойства 'ScaleId' уже определено.

Но это нигде не определено, поэтому я не понимаю, откуда исходит ошибка. Как только я прокомментирую эти две строки, ошибка исчезнет.

Причина, по которой мне нужно включить идентификатор масштаба в качестве свойства, заключается в том, что мне иногда нужно запрашивать элементы, которые не имеют масштаба или имеют определенный идентификатор масштаба. Если я сделаю это с помощью свойства навигации Scale (используя LocationItem.Scale.ScaleId) и посмотрю на сгенерированный SQL, я вижу, что он выполняет соединение двух таблиц. Я хочу исключить этот дополнительный ввод-вывод, если это возможно, поскольку вся необходимая информация уже находится в таблице LocationItem.

Короче говоря, мой вопрос - как можно использовать свойство навигации Scale и ScaleId в качестве другого свойства объекта LocationItem при использовании отношения один-к-одному?

...