Невозможно обновить EntitySet - потому что у него есть DefiningQuery и нет элемента <UpdateFunction> - PullRequest
499 голосов
/ 28 сентября 2011

Я использую Entity Framework 1 с .net 3.5.

Я делаю что-то простое, как это:

var RoomDetails = context.Rooms.ToList();

foreach (var Room in Rooms)
{        
   Room.LastUpdated = DateTime.Now;
}

Я получаю эту ошибку при попытке сделать:

 context.SaveChanges();

Я получаю ошибку:

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

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

Все мои поиски показывают одно и то же, что на объекте, который я пытаюсь обновить, не объявлен первичный ключ. Но, увы, у меня есть первичный ключ, объявленный ...

Ответы [ 19 ]

2 голосов
/ 06 апреля 2017

У меня была такая же проблема.Как говорилось в этой ветке, в моей таблице не было PK, поэтому я установил PK и запустил код.Но, к сожалению, ошибка пришла снова.Затем я удалил соединение с БД (удалите файл .edmx в папке Model в обозревателе решений) и воссоздал его.Ошибка ушла после этого.Спасибо всем за то, что поделились своим опытом.Это сэкономит много времени.

1 голос
/ 18 февраля 2019

Это не новый ответ, но поможет кому-то, кто не уверен, как установить первичный ключ для своей таблицы. Используйте это в новом запросе и запустите. Это установит столбец UniqueID в качестве первичного ключа.

USE [YourDatabaseName]
GO

Alter table  [dbo].[YourTableNname]
Add Constraint PK_YourTableName_UniqueID Primary Key Clustered (UniqueID);
GO
1 голос
/ 26 марта 2014

У меня возникла эта проблема, потому что я генерировал свой EDMX из существующей базы данных (разработанной кем-то другим, и здесь я использовал термин «разработано» свободно).

Оказывается, в таблице вообще не было ключей,EF генерировал модель со множеством ключей.Мне нужно было добавить первичный ключ в таблицу db в SQL, а затем обновил мою модель в VS.

Это исправило это для меня.

0 голосов
/ 21 августа 2018

Откройте файл .edmx в редакторе XML, а затем удалите тег из тега, а также измените хранилище: Schema = "dbo" на Schema = "dbo" и перестройте решение, теперь ошибка устранится, и вы сможете сохранить данные. .

0 голосов
/ 08 июня 2018

У меня возникла эта проблема, и я считаю, что она возникла из-за того, что я удалил первичный ключ индекса для моих таблиц и заменил его индексом для некоторых других полей в таблице.

После удаленияИндекс первичного ключа и обновил edmx, вставки перестали работать.

Я обновил таблицу до старой версии, обновил edmx, и все снова работает.

Я должен отметить, что когда я открывал EDMX для устранения этой проблемы, проверял, был ли определен первичный ключ, он был.Так что ни одно из вышеперечисленных предложений не помогло мне.Но обновление индекса по первичному ключу, похоже, сработало.

0 голосов
/ 23 ноября 2017

Мне просто нужно было удалить таблицу из модели и снова обновить модель, вернув таблицу обратно.Я предполагаю, что первичный ключ был создан после того, как таблица была введена в модель.

0 голосов
/ 12 октября 2017

просто добавьте первичный ключ к вашей таблице и затем воссоздайте свой EF

0 голосов
/ 13 августа 2017

У меня была точно такая же проблема, к сожалению, добавление первичного ключа не решает проблему.Итак, вот как я решаю свой:

  1. Убедитесь, что у вас есть primary key в таблице, поэтому я изменяю свою таблицу и добавляю первичный ключ.
  2. Delete the ADO.NET Entity Data Model (файл edmx), где я использую для сопоставления и подключения к моей базе данных.
  3. Add again a new file of ADO.NET Entity Data Model для подключения к моей базе данных и для сопоставления свойств моей модели.
  4. Clean and rebuild the solution.

Проблема решена.

0 голосов
/ 26 июня 2017

Добавление первичного ключа тоже сработало!

Как только это будет сделано, вот как обновить модель данных, не удаляя ее -

Щелкните правой кнопкой мыши на странице дизайнера объектов edmx и выберите «Обновить модель из базы данных».

...