当我使用EF6编辑实体时,我的服务层中的代码类似于:
public bool EditPatient(Patient patient)
{
db.Entry(patient).State = EntityState.Modified;
db.SaveChanges();
return true;
}
如果患者的对象字段实际发生变化,是否只能进行SaveChanges调用?
每当有人在编辑页面上按下保存时,即使有人按下保存而不进行任何更改,也会调用此方法。
这不起作用,因为当我检索并更改患者对象时,检索现有患者会反映这些变化。所以它总是看到patient == existingPatient
。在将更改保存到db之前,它看起来像是在缓存它。
var existingPatient = db.Patients.Where(x => x.PatientId == patient.PatientId).First();
if (patient != existingPatient)
{
var patientHistory = Mapper.Map<PatientHistory>(patient);
patientHistory.UserId = UserId;
patientHistory.ChangeType = "Edited";
CreatePatientAudit(patientHistory);
db.Entry(patient).State = EntityState.Modified;
db.SaveChanges();
return true;
}
else
{
return false;
}