我正在研究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