我正在研究mvc3 web应用程序。当用户更新某些内容时,我想将旧数据与用户输入的新数据进行比较,并将每个不同的字段添加到日志中以创建活动日志。发现相同类型的两个实体之间的差异
现在这是我攒动的样子:
[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
}
但我真的不想做,对于对象的所有属性。
我不知道什么是迭代通过两个对象来找到不匹配的最佳方式(例如,用户更改名称或状态...),并根据可以存储在另一个差异中的差异构建列表表。
哇,这工作出色!谢谢! – LanFeusT 2011-04-28 00:51:10
非常有用的小片段 - 谢谢! – rwalter 2013-10-22 17:02:50
我另外,如果财产是你需要的proerties转换日期时间: '如果(selfValue为datetime && toValue是DATETIME) { \t \t \t \t \t \t \t \t \t日期时间从=(DateTime的)selfValue; DateTime to =(DateTime)toValue; if(!DateTime.Equals(from,to)) { }' – JoeJoe87577 2015-05-04 13:16:44