Я работаю над веб-приложением mvc3. Когда пользователь что-то обновляет, я хочу сравнить старые данные с новыми, которые вводит пользователь, и для каждого другого поля добавить их в журнал, чтобы создать журнал действий.
Прямо сейчас вот как выглядит мое действие сохранения:
[HttpPost]
public RedirectToRouteResult SaveSingleEdit(CompLang newcomplang)
{
var oldCompLang = _db.CompLangs.First(x => x.Id == newcomplang.Id);
_db.CompLangs.Attach(oldCompLang);
newcomplang.LastUpdate = DateTime.Today;
_db.CompLangs.ApplyCurrentValues(newcomplang);
_db.SaveChanges();
var comp = _db.CompLangs.First(x => x.Id == newcomplang.Id);
return RedirectToAction("ViewSingleEdit", comp);
}
Я обнаружил, что могу использовать это для перебора моего свойства oldCompLang:
var oldpropertyInfos = oldCompLang.GetType().GetProperties();
Но это не очень помогает, так как показывает только свойства (Id, Name, Status ...), а не значения этих свойств (1, Hello, Ready ...).
Я мог бы просто пройти трудный путь:
if (oldCompLang.Status != newcomplang.Status)
{
// Add to my activity log table something for this scenario
}
Но я действительно не хочу делать это для всех свойств объекта.
Я не уверен, каков лучший способ перебрать оба объекта, чтобы найти несоответствия (например, пользователь изменил имя или статус ...) и построить список из тех различий, которые я могу сохранить в другой таблице .