Ошибка 6017: NavigationProperty '(propertyname)' для типа '(typename)' является источником

Error 6017: The NavigationProperty '(propertyname)' on the type '(typename)' is the source of a generated property '(otherpropertyname)' which conflicts with a member of the same name.

Хорошо, я вполне уверен, что понимаю, почему я получаю это сообщение об ошибке, но мне не очевидно, как его обойти.

У меня есть таблица salesreps, которая ссылается на таблицу territories с помощью простого отношения внешнего ключа. Таблица territories обновляется через автоматический канал, тогда как таблица торговых представителей поддерживается вручную через веб-интерфейс, который я разрабатываю.

Я не хочу, чтобы представители удалялись, если территория исчезнет; Я намерен выделить их для ручного корректирующего действия в пользовательском интерфейсе, который я создаю, как представителей-сирот, нуждающихся в назначении территории.

Торговые представители определяются идентификатором, который уникален только для данной территории (я ничего не могу с этим поделать, это находится вне моего контроля), если территория удалена, я сделал поведение внешнего ключа ON DELETE, установив значение territoryID равным нулю, и сделал столбец нулевым. Затем я создал вычисляемый столбец с именем territoryReferenceID в таблице salesreps со значением isnull(territoryID, 0), сделал его постоянным и создал первичный ключ на основе столбцов repID и territoryReferenceID, поскольку я не могу создать столбец PK, допускающий значение NULL (который я все еще считаю хромым, даже если я понимаю, почему это так). В базе данных это работает нормально, и если каким-то образом две территории будут удалены с одним и тем же repID одновременно (крайне маловероятно), у меня все в порядке с ошибкой нарушения первичного ключа, которую я могу перехватить.

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

Как я могу исправить эту проблему?


person Jeremy Holovacs    schedule 25.09.2011    source источник


Ответы (1)


Вот что я в итоге сделал:

Я удалил отношения в модели объекта и свойства навигации, намереваясь просто напрямую использовать идентификаторы ключей. Это работало, пока в следующий раз я не обновил модель из базы данных, где она повторно ввела связь и выдала ошибку.

Поэтому я создал представление данных только с одним столбцом territoryID (со ссылкой на вычисляемый столбец) и создал хранимые процедуры для создания, изменения и удаления записей из представления.

Это работает. Это уродливо, но это то, что я получаю за попытку «сэкономить время» с EF.

person Jeremy Holovacs    schedule 26.09.2011