Вы можете перезагрузить исходную сущность из базы данных:
else {
// Existing entity
var serviceInDb = context.Services.Find(service.ServiceID);
service.EntryDate = serviceInDb.EntryDate;
context.Entry(serviceInDb).CurrentValues.SetValues(service);
}
Когда вы вызываете SaveChanges
, позже в базу данных будет отправлен оператор UPDATE только для свойств, которые действительно изменились (имеет также преимущества для других неизмененных свойств).
Или просто перезагрузите EntryDate
:
else {
// Existing entity
var entryDateInDb = context.Services
.Select(s => s.EntryDate)
.Single(s => s.ServiceID == service.ServiceID);
service.EntryDate = entryDateInDb;
context.Entry(service).State = EntityState.Modified;
}
Другой рабочий, но уродливый подход таков:
context.Services.Attach(service); // thanks to user202448, see comments
context.Entry(service).Property(s => s.Name).IsModified = true;
context.Entry(service).Property(s => s.Duration).IsModified = true;
context.Entry(service).Property(s => s.UpdatedOn).IsModified = true;
context.Entry(service).Property(s => s.Cost).IsModified = true;
Итак, не устанавливайте свойство EntryDate
как измененное, а все остальные свойства по одному.
Подход, который приходит в голову ...
context.Entry(service).State = EntityState.Modified;
context.Entry(service).Property(s => s.EntryDate).IsModified = false;
... к сожалению, не работает, потому что возврат свойства к неизмененному, которое уже помечено как Modified
, не поддерживается и вызовет исключение.