Он имеет DefiningQuery, но не элемент InsertFunction... err

Эта вещь сводит меня с ума, и ошибка для меня совершенно бессмысленна:

Невозможно обновить EntitySet 'TableB', потому что у него есть DefiningQuery, и в элементе нет элемента для поддержки текущей операции.

Мои таблицы помещаются так:

TableA
int idA (identity, primary key)
...

TableB
int idA (FK for TableA.idA)
int val

TableB не имеет определенного первичного ключа на SQL-сервере. Entity Framework импортировала таблицу и ассоциацию и установила оба поля в качестве ключа. Но он выдаст эту ошибку, когда я попытаюсь сделать вставку в таблицу!

Что случилось?


Edit: Как предложил Алекс, решение было следующим:

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

Я оставил ключ как есть, так как мне было хорошо, что оба столбца являются частью ключа.

Ответ 1

Хорошо, когда таблица встречается без PrimaryKey, она рассматривается как вид.

И просмотры отображаются в файле EDMX (открываются в XML-редакторе для просмотра) в элементе StorageModel\EntitySet [n]\DefiningQuery.

Когда у вас есть DefiningQuery, Entity становится readonly, если вы не добавляете функции модификации. Вам необходимы 3 функции модификации (также называемые хранимые процедуры) по одному для каждого из Вставки, обновления и удаления.

Но у вас есть два варианта:

Измените определение ключа:

В вашем случае я рекомендую (1).

Ответ 2

Просто добавьте первичный ключ в таблицу. Это. Проблема решена.

ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)

Ответ 3

Мне не хватало первичного ключа на моей таблице и получил это сообщение об ошибке. Одна вещь, которую я заметил, это после того, как я добавил ключ к таблице, мне нужно было очистить таблицу от edmx с помощью конструктора, сохранить edmx, а затем обновить его снова, чтобы добавить таблицу. Он не собирал ключ поскольку он уже был назначен как представление. Это не требовало редактирования edmx вручную.

Ответ 4

Добавить первичный ключ в таблицу, удалить модель из модели edmx, затем выбрать обновление из базы данных, выполнить и запустить...... works

Ответ 5

@Palantir. Убедитесь, что в обеих таблицах установлены первичные ключи, и будьте осторожны с несколькими первичными ключами, установленными в таблице.