Подтвердить что ты не робот

Потому что в элементе <ModificationFunctionMapping> существует элемент DefiningQuery и no <InsertFunction>

Я использую EF в своем приложении.

Я пытаюсь сохранить\вставить новую запись в таблицу сопоставлений

и получите следующую ошибку:

Unable to update the EntitySet 'UsersLimitationToCountry' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation.

Должен ли я определить его в edmx самостоятельно? Как?

4b9b3361

Ответ 1

В моей таблице сопоставления "много-во-многих" отсутствовала PK

и проблема решена.

Ответ 2

Согласился с принятым ответом. Просто указав причину этого...

Когда сопоставление EF выполняется с таблицей, у которой нет первичного ключа, оно рассматривается как представление. Поскольку представления являются логическими объектами, они не могут быть обновлены.

Поэтому либо добавьте отсутствующий первичный ключ в таблицу, либо рассмотрите их как представление & не выполняйте никаких операций над ними.

Ответ 3

Если ваше представление обновляется, вы можете просто удалить элемент из определения EntitySet для вашего представления внутри Раздел StorageModel вашего .edmx и нормальная обработка обновлений будет работать как с любой другой таблицей.

Это для меня. Простое удаление привело к другой ошибке. Я следовал за шагами этого поста, кроме последнего. Для вашего удобства я скопировал 4 шага из сообщения, которое я выполнил, чтобы решить проблему следующим образом:

  • Щелкните правой кнопкой мыши на файле edmx, выберите Open with, XML editor
  • Найдите объект в элементе edmx: StorageModels
  • Удалите DefiningQuery полностью
  • Переименуйте хранилище: Schema = "dbo" в Schema = "dbo" (иначе код будет генерировать ошибку, указав, что имя недействительно)

Ответ 4

Я сталкивался с этой проблемой в обновляемом представлении. Нашел эту статью решил мою проблему.

Таким образом, в базовой таблице моего представления определен первичный ключ, но EF не знает, какие столбцы находятся в PK, поскольку сущность была построена на представлении. Хитрость заключается в том, чтобы "убедить" EF, что ваше представление может быть обновлено как таблица. Шаги почти такие же, как упомянутые выше ответы:

  1. Щелкните правой кнопкой мыши по файлу edmx, выберите "Открыть с помощью", XML-редактор
  2. Найдите объект в элементе edmx: StorageModels
  3. Полностью удалите раздел <DefiningQuery>
  4. Переименуйте магазин: Schema = "dbo" в Schema = "dbo"
  5. Измените store:Type="Views" на store:Type="Tables"

Ответ 5

  • Щелкните правой кнопкой мыши на файле edmx, выберите Open with, XML editor

  • Найдите объект в элементе edmx: StorageModels

  • Полностью удалить DefiningQuery

  • Переименуйте store:Schema="dbo" в Schema="dbo" (иначе код будет генерировать ошибку, указав, что имя недействительно) Эти шаги работали для меня

Ответ 6

У моей таблицы не было первичного ключа в дизайне таблицы sql. Добавил и решил.

Ответ 7

** Повторно проверьте, что ваши таблицы не имеют PK: ** просто добавьте первичный ключ, а затем удалите и снова добавьте таблицу в edmx, тогда она должна работать

Ответ 8

Убедитесь, что в ваших таблицах внешних ключей не более нескольких имен столбцов, соответствующих столбцам в вашей ссылочной таблице; только первичный ключ должен соответствовать вашей таблице ref с реферированной таблицей. 0..1 должно иметь различное имя столбца, разработать соглашение об именах для ваших столбцов, которое гарантирует, что ссылки и реферированные таблицы не имеют более одного имени столбцов. Предоставлено ALMwConsult.net

Ответ 9

Если вы не обрабатываете первичный ключ в своей таблице, то эта проблема определенно произойдет в MVC при обновлении и вставке базы данных записей

Исключение DbUpdate не было обработано пользователем

Ответ 10

Работа с db первым приложением mvc. Проблема заключалась в том, что я забыл определить первичный ключ для таблицы. Решенный путем добавления первичного ключа с помощью команды alter и обновления DAL (edmx)