asp.net-mvc – 找到相同类型的两个实体之间的差异
发布时间:2020-12-15 13:51:38 所属栏目:asp.Net 来源:互联网
导读:我正在开发一个mvc3网络应用程序.当用户更新某些东西时,我想将旧数据与用户输入的新数据进行比较,并且将每个不同的字段添加到日志中以创建活动日志. 现在这是我的保存动作的样子: [HttpPost]public RedirectToRouteResult SaveSingleEdit(CompLang newcompla
我正在开发一个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 } 但是我真的不想为对象的所有属性做这个. 我不知道什么是迭代两个对象以找到不匹配的最佳方法(例如,用户更改了名称或状态…),并从我可以存储在另一个表中的差异构建一个列表. 解决方法这不是很糟糕,您可以使用反射比较属性“手”,并编写一个扩展方法进行重用 – 您可以将其作为起点:public static class MyExtensions { public static IEnumerable<string> EnumeratePropertyDifferences<T>(this T obj1,T obj2) { PropertyInfo[] properties = typeof(T).GetProperties(); List<string> changes = new List<string>(); foreach (PropertyInfo pi in properties) { object value1 = typeof(T).GetProperty(pi.Name).GetValue(obj1,null); object value2 = typeof(T).GetProperty(pi.Name).GetValue(obj2,null); if (value1 != value2 && (value1 == null || !value1.Equals(value2))) { changes.Add(string.Format("Property {0} changed from {1} to {2}",pi.Name,value1,value2)); } } return changes; } } (编辑:百色站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 从ASP.Net中的sessionID获取会话对象
- asp.net-mvc – Domain Driven Design新手,请简要解释’价值
- asp.net-mvc – ASP.NET MVC查看引擎解析顺序
- asp.net – 访问.NET中的Web服务中的查询字符串(GET请求数组
- asp.net-mvc – 使用IIS基本身份验证的OWIN身份验证
- 在ASP.Net网站上使用WCF服务的教程?
- asp.net – 错误:数据绑定方法(如Eval(),XPath()和Bind()只
- asp.net-web-api – WebAPI中的长时间运行任务
- asp.net-mvc – 使用Asp.net MVC 4中的OutputCacheAttribut
- 是否可以使用ASP.NET ScriptManager来使用Windows FIPS安全
推荐文章
站长推荐
- 在IIS上部署ASP.NET Core项目的图文方法
- asp.net – Intranet / Internet的Windows身份验
- asp.net(C#)禁止缓存文件不让文件缓存到客户端
- asp.net-web-api2 – 在WebAPI2项目中加载System
- asp.net(C#)把汉字转化成全拼音函数(全拼)
- asp.net – 在Web.config帮助中定义tagPrefixes
- asp.net – 小数点后尾数为零
- asp.net-mvc – ASP.NET MVC查看引擎解析顺序
- asp.net-mvc – 无法在Web服务器上启动调试. Web
- asp.net-mvc – Windows 8 VS2012 IISExpress Wi
热点阅读