Поскольку вы используете ASP.NET MVC, вы работаете в среде без состояний .Это означает, что после того, как запрос завершит обработку, больше не будет «Память Entity Framework» или «График».
Итак, вам нужно явно указать EF, что вы хотите добавить или обновить.
Вот как это делается:
using (BissEntities context = new BissEntities())
{
if (adCategoryFilter.Id < 1)
context.AdCategoryFilters.AddObject(adCategoryFilter);
else {
var stub = new AdCategoryFilters { Id = adCategoryFilter.Id };
context.AdCategoryFilters.Attach(stub);
context.AdCategoryFilters.ApplyCurrentValues(adCategoryFilter);
}
context.SaveChanges();
}
Это называется техникой заглушки .
Короче говоря, вы создаете новую сущность с тем же самымключ сущности как сущность, которую вы пытаетесь ОБНОВИТЬ (в вашем случае ключ сущности равен «Id»).
Затем вы «присоединяете» эту заглушку (так, чтобы она отслеживалась внутренним графом EF), затем переопределяетезначения в этой заглушке с вашей сущностью UPDATE, затем сохраните изменения.
Я не могу использовать UpdateModel , так как у меня многоуровневая архитектура и я использую POCO, пользовательские модели представления и т. д.- поэтому я создал собственный метод «UpdateModel» в своем сервисе / репозитории - который выполняет (более сложную) версию выше.
Также старайтесь не использовать «если Id <1, это дополнение»с ASP.NET MVC - как если бы вы забыли привязать идентификатор на представлении, он будетбудет передаваться как 0, так что даже если вы можете делать <strong>обновление , приведенный выше код попытается сделать add .
Вместо этого будьте более явными - используйте отдельные методы действий для добавления / обновления.
HTH.