Ошибка Entity Framework 4: невозможно обновить EntitySet, поскольку он имеет DefiningQuery
Хорошо, вот сценарий. У меня 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");
}
Почему это не работает?
Ответы
Ответ 1
Я предполагаю, что полное сообщение об исключении похоже на:
Невозможно обновить EntitySet YourTableName, поскольку в элементе ModificationFunctionMapping существует элемент DefiningQuery и no InsertFunction для поддержки текущей операции.
Это произойдет, если ваша таблица DB не имеет определенного первичного ключа.
Добавьте первичный ключ в свою таблицу (используя SQL Server Management Studio или что-то еще) и обновите модель .edmx
из базы данных.
Ответ 2
Я сталкиваюсь с той же проблемой, и я исправил следующую ссылку:
Я удаляю раздел DefiningQuery в .edmx на основе содержимого третьей ссылки. И тогда все работает как прелесть.
Ответ 3
Поместите составной первичный ключ в таблицу сопоставления, это позволит EF правильно обработать его.
Ответ 4
Ошибка: невозможно обновить EntitySet, поскольку он имеет DefiningQuery
Дважды я получил эту ошибку, дважды я искал ответы повсюду, и в итоге мои сопоставления были испорчены или база данных не имела первичного ключа или чего-то еще. Я предлагаю проверить все это...