Когда вы выбираете объект из DbContext в свойстве call и update, вы не должны вызывать Update
, а просто вызывать SaveChanges
.
Т.е.
Voucher voucher = _context.Vouchers
.Single(m => m.VoucherId == id);
// ...
voucher.VoucherStatus = "Reconciled";
// ...
_context.SaveChanges();
Update
сгенерирует оператор, который обновит все столбцы на объекте, и хотя он должен исключать столбцы, помеченные как DatabaseGeneratedOption.Identity
, здесь это может быть не так. Позволяя отслеживанию изменений делать свое дело без вызова Update, EF сгенерирует инструкцию UPDATE только для измененных столбцов.
Update
будет более применимым при принятии сущности (как вы закомментировали) и присоединении / обновлении ее состояния в целом. Я не рекомендую этот подход, так как он перезаписывает все значения и уязвим для ряда проблем, включая устаревшие обновления данных, а также неожиданное вмешательство клиента. (Изменение столбцов, которые ваш пользовательский интерфейс не допускает атаками «человек в браузере» / «средний»). Лучше загрузить объект fre sh, проверить входящие данные, проверить версии строк / измененные временные метки для устаревших обновлений и т. Д. c , вместо того, чтобы принимать сущность по номиналу и помещать ее в БД.
Редактировать: Если эти идентификаторы являются GUID в БД, то почему бы не привести их в качестве GUID в сущности?