asp.net-mvc – 找到相同类型的两个实体之间的差异
发布时间:2020-12-27 15:21:35 所属栏目: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 – 访问.NET中的Web服务中的查询字符串(GET请求数组
- IIS和ASP.Net Web开发服务器之间的行为差异?
- asp.net – Visual Studio – 为什么.ASPX文件比.ASPX.CS文
- 隐藏ASP.NET菜单项
- asp.net-mvc – MVC 5:Asp.net身份:如何建模UserRole
- 选择顶部N值,但跳过M个结果
- 在ASP.NET中,什么决定了HostingEnvironment.IsDevelopmentE
- 实体框架 – 使用EF和WebAPI,如何返回一个ViewModel并支持I
- asp.net-mvc – Umbraco 7自定义cookie
- asp.net-mvc-3 – 如何避免使用MVC3 FileContentResult重复
推荐文章
站长推荐
- asp.net-mvc – 使用Entity FrameWork保存更改/更
- asp.net-mvc – asp.net MVC antiorgerytoken异常
- asp.net-mvc-3 – 如何从ASP.NET MVC#输出中删除
- LoginView中的ASP.NET LoginStatus不会触发Loggi
- ASP.NET web.config中数据库连接字符串connectio
- asp.net-mvc – 如何在ASP.NET MVC中生成弹出页面
- asp.net-mvc – 为什么在视图引擎中指定位置时,v
- asp.net – 选择框更改事件中的setTimeout
- asp.net – FF和IE不从CSS加载img src
- ASP.NET代码隐藏中的当前工作目录 – 我们可以依
热点阅读
