Я работаю над веб-приложением mvc3. Когда пользователь что-то обновляет, я хочу сравнить старые данные с новым, вводимым пользователем, и для каждого отдельного поля добавить их в журнал для создания журнала активности.
Сейчас это то, что выглядит мое действие save:
[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
}
Но я действительно не хочу делать это для всех свойств объекта.
Я не уверен, что лучший способ итерации через оба объекта найти несоответствия (например, пользователь изменил имя или статус...) и создать список из тех различий, которые я могу сохранить в другой таблице.