Entity Framework 4 Ошибка: невозможно обновить EntitySet, так как он имеет DefiningQuery - PullRequest
15 голосов
/ 12 августа 2010

Хорошо, вот сценарий. У меня есть 3 таблицы. Один называется aspnet_Users, другой - категории и таблица ссылок - User_Categories. aspnet_Users и Categories имеют первичные ключи (UserId и ID соответственно). Таблица связывания имеет только два столбца: CategoryID и UserId, и для каждого столбца настроены взаимосвязи внешнего ключа, и у меня есть уникальная настройка ключа для двух столбцов в User_Categories. Это устанавливает отношение «многие ко многим» между таблицей aspnet_Users и таблицей категорий. Я создал файл edmx для сущностей из этой настройки базы данных, и все выглядит отлично и работает почти для всех операций.

Что я хочу сделать, это добавить новую категорию из формы (которая работает безупречно сама по себе), а также, в то же время, связать конкретного пользователя с этой вновь представленной категорией. Когда я пытаюсь сделать это, я получаю сообщение об ошибке в строке темы. Вот код, который я использую, чтобы попробовать это (ctx - это объект контекста моих сущностей):

public ActionResult Create(Category category, Guid userId)
{
    aspnet_Users user = ctx.aspnet_Users.SingleOrDefault(x => x.UserId == userId);
    ctx.Categories.AddObject(category);
    user.Categories.Add(category);
    ctx.SaveChanges();;
    return RedirectToAction("Index");
}

Почему это не работает?

Ответы [ 4 ]

39 голосов
/ 07 сентября 2010

Я предполагаю, что полное сообщение об исключении выглядит примерно так:

Невозможно обновить EntitySet YourTableName , так как оно имеет DefiningQuery и в элементе ModificationFunctionMapping отсутствует элемент InsertFunction дляподдерживать текущую операцию.

Это произойдет, если в таблице вашей БД не определен первичный ключ.

Добавьте первичный ключ в вашу таблицу (используя SQL Server Management Studio илии обновите модель .edmx из базы данных.

2 голосов
/ 24 апреля 2014

Поместите составной первичный ключ в таблицу сопоставления, это скажет EF обрабатывать его правильно.

2 голосов
/ 11 ноября 2011

Я столкнулся с той же проблемой, и я исправил по следующей ссылке:

Я удаляю раздел DefiningQuery в .edmx на основе содержимого 3-й ссылки,И тогда все работает как шарм.

2 голосов
/ 08 июля 2011

Ошибка: невозможно обновить EntitySet, так как он имеет DefiningQuery

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...