Ошибка 6002: для таблицы / представления не определен первичный ключ
Я получаю пару из этих ошибок, которые имеют смысл, как они на представлениях. Я понимаю, что они имеют в виду, однако я ищу способ предотвратить создание этого предупреждающего сообщения с моделью. Я думал, что мог бы отредактировать.edmx XML, чтобы удалить ошибки, но предупреждения восстанавливаются. У меня есть ключ, определенный на представлениях, хотя он, кажется, не помог.
Есть ли способ избавиться от этих предупреждений? Или в каком-то смысле Entity Framework понимает, что это не редактируемая таблица и что ей не нужен первичный ключ? Я спрашиваю в основном с точки зрения эстетики проекта (мне не нравится видеть предупреждения в моем списке ошибок).
4 ответа
Я прекрасно понимаю, откуда ты. Это одна из самых больших неприятностей, с которыми мне приходилось сталкиваться при попытке справиться с EF, и, очевидно, это очень распространенная проблема.
Решение, которое работало для меня, состояло в том, чтобы открыть EDMX с представлением в режиме конструктора и назначить первичный ключ самостоятельно. Неважно, что это такое, пока оно есть. Вы щелкаете правой кнопкой мыши по столбцу, который хотите установить в качестве первичного ключа, и выбираете Entity Key
(это опция флажка). Возможно, вам придется выйти и перезапустить Visual Studio, пока это предупреждение не решит исчезнуть.
Я надеюсь, что это работает и для вас. Но даже если это произойдет, это будет кратковременным решением, так как в следующий раз, когда вы обновите свое представление, у него, вероятно, будет та же проблема. Но пока вышеперечисленные шаги работают, это займет всего несколько секунд, чтобы исправить.
Кроме того, вот несколько ссылок, которые могут оказаться полезными:
В моем случае это легко решается, ниже приведены шаги:
- Очистить решение
- Закрыть Visual Studio
- Откройте Visual Studio
- Очистить и построить решение
Прежде чем что-то попробовать, можно попробовать убедиться, что вы ничего не меняете вручную в edmx.
Я надеюсь, это поможет.
Мне повезло в EF4 и EF5, используя технику, описанную в http://www.hilmiaric.com/?p=95 используя в качестве идентификатора rownumber
SELECT ISNULL((ROW_NUMBER() OVER (ORDER BY XXX ASC)), 0) AS 'ID',
Но у меня нет решения для EF5 и выше. Последняя попытка на 6.1.3
Entity Framework может быть очень расстраивающим время от времени. Мне бы очень хотелось, чтобы Microsoft отошла от дел и исправила все проблемы с EF Visual Modeler и обновлением модели из базы данных. Я потратил последние полчаса на очистку дубликатов полей в представлении путем ручного изменения файла.edmx, и я также столкнулся с плохой сборкой и этой проблемой еще раз:
<!--Errors Found During Generation:
warning 6002: The table/view 'BMP_DBA.BMP_INST_DATA_SEARCH_VIEW' does not have a primary key defined. The key has been inferred and the definition was created as a read-only table/view.
-->
Увы, я должен был сделать так, как всегда делал, и вручную установить первичный ключ, щелкнув его правой кнопкой мыши в конструкторе, а затем перезапустив Visual Studio и затем перестроив приложение. Когда я перестраиваюсь, я все еще получаю предупреждение в файле.edmx, но сборка теперь работает. Это всего лишь один из нюансов работы с EF.
Проверьте таблицу базы данных на наличие первичного ключа. Возможно, столбец идентификатора отмечен как идентификатор, но не как первичный ключ.