Эта штука сводит меня с ума, и ошибка для меня совершенно бессмысленна:
Невозможно обновить EntitySet «TableB», потому что у него есть DefiningQuery и в элементе нет элемента, поддерживающего текущую операцию.
Мои таблицы размещены так:
TableA int idA (идентификатор, первичный ключ) ... TableB int idA (FK для TableA.idA) int val
TableB не имеет определенного первичного ключа на сервере SQL. Entity Framework импортировала таблицу и ассоциацию и установила оба поля как ключевые. Но он выдаст эту ошибку, когда я попытаюсь вставить в таблицу!
В чем дело??
Изменить: как было предложено Алексом, решение было следующим:
- Щелкните правой кнопкой мыши файл edmx, выберите Открыть с помощью, редактор XML.
- Найдите объект в элементе edmx: StorageModels
- Полностью удалите DefiningQuery
- Переименуйте магазин: Schema = "dbo" в Schema = "dbo" (в противном случае код выдаст ошибку о недопустимом имени)
- Удалите свойство store: Name
Я оставил ключ таким, каким он был, так как меня устраивало, что оба столбца являются частью ключа.
asp.net
entity-framework
Palantir
источник
источник
Ответы:
Когда таблица встречается без PrimaryKey, она рассматривается как View.
И представления отображаются в файле EDMX (откройте его в редакторе XML для просмотра) в элементе StorageModel \ EntitySet [n] \ DefiningQuery.
Когда у вас есть DefiningQuery, Entity становится доступным только для чтения, если вы не добавляете функции модификации. Вам нужны 3 функции модификации (также известные как хранимые процедуры), по одной для каждой из вставки, обновления и удаления.
Но у вас есть два варианта:
Измените ключевое определение:
В вашем случае рекомендую (1).
источник
Просто добавьте в таблицу первичный ключ. Вот и все. Задача решена.
источник
Мне не хватало первичного ключа в моей таблице, и я получил это сообщение об ошибке. Я заметил одну вещь: после того, как я добавил ключ в таблицу, мне нужно было очистить таблицу от edmx с помощью конструктора, сохранить edmx, а затем обновить его снова, чтобы снова добавить таблицу. Он не собирал ключ поскольку он уже был назначен как представление. Это не требовало редактирования edmx вручную.
источник
Добавьте первичный ключ в таблицу, удалите модель из модели edmx, затем выберите обновление из базы данных, создайте и запустите ... работает
источник
@Palantir. Убедитесь, что в обеих таблицах установлены первичные ключи, и будьте осторожны с несколькими первичными ключами, установленными в таблице.
источник
Надеюсь, это решит проблему.
источник