Ответ 1
Проблема заключается в том, что при назначении findContact = contact
EntityState
не изменяется в ObjectStateManager
(поэтому он все еще установлен в Unchanged
). Поэтому оператор Update
SQL генерируется для объекта. У вас есть несколько вариантов обновления:
Вариант 1: Заполнять findContact
поле за полем:
var findContact = GetContact(contact.ContactID);
findContact.FirstName = contact.FirstName;
findContact.LastName = contact.LastName;
...
_context.SaveChanges();
Вариант 2: Используйте метод ApplyCurrentValues
:
var findContact = GetContact(contact.ContactID);
_context.ApplyCurrentValues("Contacts", contact);
_context.SaveChanges();
Вариант 3: Прикрепите обновленный объект и измените состояние в ObjectStateManager
. (Примечание: это не сделает обратный путь к базе данных для получения существующего контакта).
_context.AttachTo("Contacts", contact);
var contactEntry = Context.ObjectStateManager.GetObjectStateEntry(contact);
contactEntry.ChangeState(EntityState.Modified);
_context.SaveChanges();