Ошибка 6002: в таблице/представлении не указан первичный ключ
Я получаю пару этих ошибок, которые имеют прекрасный смысл, поскольку они находятся на представлениях. Я понимаю, что они означают, однако я ищу способ предотвратить создание предупреждающего сообщения с помощью модели. Я думал, что могу редактировать XML файл .edmx, чтобы удалить ошибки, но предупреждения будут восстановлены. У меня есть ключ, определенный на представлениях, хотя он, похоже, не помог.
Как избавиться от этих предупреждений? Или каким-то образом можно предположить, что Entity Framework понимает, что это не редактируемая таблица, и ей не нужен первичный ключ? Я прошу в основном из точки зрения эстетики проекта (мне не нравится видеть предупреждения в моем списке ошибок).
Ответы
Ответ 1
Я прекрасно понимаю, откуда вы. Это одна из самых больших неприятностей, с которыми мне приходилось сталкиваться, пытаясь справиться с EF и, по-видимому, это очень распространенная проблема.
Решение, которое работало для меня, состояло в том, чтобы открыть EDMX с представлением в режиме конструктора и назначить первичный ключ. Неважно, что это такое, если есть. Вы щелкните правой кнопкой мыши на столбце, который вы хотите установить в качестве первичного ключа, и выберите Entity Key
(это флажок). Возможно, вам придется выйти и перезапустить Visual Studio, пока это предупреждение не решит уйти.
Я надеюсь, что это сработает и для вас. Но даже если это так, это кратковременное исправление, так как при следующем обновлении вашего представления у него, вероятно, будет такая же проблема. Но до тех пор, как эти шаги работают, для исправления потребуется всего несколько секунд.
Кроме того, здесь некоторые ссылки, которые могут вам пригодиться:
Ответ 2
В моем случае это легко разрешилось, ниже приведены шаги:
- Очистите решение.
- Закрыть Visual Studio
- Открыть Visual Studio
- Очистка и построение решения
Прежде чем пытаться что-либо предпринять, можно попытаться убедиться, что вы ничего не изменяете вручную в edmx.
Надеюсь, это поможет.
Ответ 3
Мне повезло в 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
Ответ 4
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.
-->
Увы, мне пришлось делать то, что я всегда делал, и вручную установить ключ Primary, щелкнув правой кнопкой мыши его в дизайнере, а затем перезапустить Visual Studio и затем перестроить приложение. Когда я перестраиваю, я все еще получаю предупреждение в файле .edmx, но теперь сборка работает. Это всего лишь один из нюансов работы с EF.
Ответ 5
SELECT ISNULL ([A]. [Id], 999) [Id]