Он имеет 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. Убедитесь, что в обеих таблицах установлены первичные ключи, и будьте осторожны с несколькими первичными ключами, установленными в таблице.