Я думал, что все это выяснил, но я врезаюсь в кирпичную стену.
Клиент отправляет объект, мой контроллер проверяет, есть ли у пользователя право на редактирование, а затем приступает к обновлению объекта в базе данных. (вместе с любыми навигационными свойствами объекта).
Моя проблема в том, что я не могу заставить его работать ...
Я пробовал
var obj = context.Recipes.SingleOrDefault(o=>o.ID == id);
UpdateModel(obj);
Но у меня есть "модель не может быть обновленным "исключение.
Поэтому я попробовал другой подход, поместив рецепт r в список параметров (и позволив связывателю модели выполнить работу) и вызвал
context.Recipes.Attach(r);
, но при этом все осталось на «Без изменений», поэтому context.SaveChanges ()
ничего не делает.
Есть ли простое решение без необходимости писать obj.SomeProperty = r.SomeProperty
для КАЖДОГО свойства моего объекта?
Дополнительный вопрос: если у моей сущности есть свойство навигации ( collection) Я, очевидно, добавляю новые отправленные (с ID == 0
), но как мне узнать, какой из них удалить? Могу ли я где-нибудь здесь использовать отслеживание изменений EF?
По обоим вопросам: должен ли существовать волшебный метод «сравните этот объект с этим объектом, а затем сохраните»?