Ответ 1
В моей таблице сопоставления "много-во-многих" отсутствовала PK
и проблема решена.
Я использую 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 самостоятельно? Как?
В моей таблице сопоставления "много-во-многих" отсутствовала PK
и проблема решена.
Согласился с принятым ответом. Просто указав причину этого...
Когда сопоставление EF выполняется с таблицей, у которой нет первичного ключа, оно рассматривается как представление. Поскольку представления являются логическими объектами, они не могут быть обновлены.
Поэтому либо добавьте отсутствующий первичный ключ в таблицу, либо рассмотрите их как представление & не выполняйте никаких операций над ними.
Если ваше представление обновляется, вы можете просто удалить элемент из определения EntitySet для вашего представления внутри Раздел StorageModel вашего .edmx и нормальная обработка обновлений будет работать как с любой другой таблицей.
Это для меня. Простое удаление привело к другой ошибке. Я следовал за шагами этого поста, кроме последнего. Для вашего удобства я скопировал 4 шага из сообщения, которое я выполнил, чтобы решить проблему следующим образом:
DefiningQuery
полностьюЯ сталкивался с этой проблемой в обновляемом представлении. Нашел эту статью решил мою проблему.
Таким образом, в базовой таблице моего представления определен первичный ключ, но EF не знает, какие столбцы находятся в PK, поскольку сущность была построена на представлении. Хитрость заключается в том, чтобы "убедить" EF, что ваше представление может быть обновлено как таблица. Шаги почти такие же, как упомянутые выше ответы:
<DefiningQuery>
store:Type="Views"
на store:Type="Tables"
Щелкните правой кнопкой мыши на файле edmx, выберите Open with, XML editor
Найдите объект в элементе edmx: StorageModels
Полностью удалить DefiningQuery
Переименуйте store:Schema="dbo"
в Schema="dbo"
(иначе код будет генерировать ошибку, указав, что имя недействительно)
Эти шаги работали для меня
У моей таблицы не было первичного ключа в дизайне таблицы sql. Добавил и решил.
** Повторно проверьте, что ваши таблицы не имеют PK: ** просто добавьте первичный ключ, а затем удалите и снова добавьте таблицу в edmx, тогда она должна работать
Убедитесь, что в ваших таблицах внешних ключей не более нескольких имен столбцов, соответствующих столбцам в вашей ссылочной таблице; только первичный ключ должен соответствовать вашей таблице ref с реферированной таблицей. 0..1 должно иметь различное имя столбца, разработать соглашение об именах для ваших столбцов, которое гарантирует, что ссылки и реферированные таблицы не имеют более одного имени столбцов. Предоставлено ALMwConsult.net
Если вы не обрабатываете первичный ключ в своей таблице, то эта проблема определенно произойдет в MVC при обновлении и вставке базы данных записей
Исключение DbUpdate не было обработано пользователем
Работа с db первым приложением mvc. Проблема заключалась в том, что я забыл определить первичный ключ для таблицы. Решенный путем добавления первичного ключа с помощью команды alter и обновления DAL (edmx)