Ошибка 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.

Проверьте таблицу базы данных на наличие первичного ключа. Возможно, столбец идентификатора отмечен как идентификатор, но не как первичный ключ.

Другие вопросы по тегам