现在的位置: 主页 > 公司荣誉 > 文章正文

.NET MVC通过反射获取数据修改历史记录,并插入数据表

作者:武警河南洛阳红丝带网 来源:www.027fck.com 未知发布时间:2017-09-13 12:47:55
.NET MVC通过反射获取数据修改历史记录,并插入数据表中  折磨了我一个晚上的问题,奈何对物理的反射印象太深了,整天去想着物理的反射、折射怎么解。感谢少将哥哥给我的指点,经过一个晚上对反射的恶补,最终搞定了。纪念一下。

  1.核心代码:

复制代码

1 private static void IsUpdate<T>(T old, T current, string id)

2 {

3 Model.PerFileHistory history = new Model.PerFileHistory();

4 Model.Atrributes.ModifyFields atrr = null;

5 Type type = typeof(T);

6 PropertyInfo[] propertys = type.GetProperties();

7 foreach (PropertyInfo property in propertys)

8 {

9 if (property.PropertyType.IsValueType || property.PropertyType.Name == "String")

10 {

11 if (property.PropertyType.FullName.Contains("Guid"))

12 continue;

13 //if (property.Name != "CreateUserID" && property.Name != "CreateTime" && property.Name != "ModifyUserID" && property.Name != "LastModifyTime")//排除这些字段不做判断

14 //{

15 if (property.GetCustomAttributes(typeof(Model.Atrributes.ModifyFields), false).Count() > 0)

16 {

17 object o1 = property.GetValue(old, null); //以前的值

18 object o2 = property.GetValue(current, null); //修改后的值

19 string str1 = o1 == null ? string.Empty : o1.ToString();

20 string str2 = o2 == null ? string.Empty : o2.ToString();

21 //判断两者是否相同,不同则插入历史表中

22 if (str1 != str2)

23 {

24 history.BeforeValue = str1; //修改前的值

25 history.AfterValue = str2; //修改后的值

26 history.PCardNo = id; //修改数据的ID

27 history.IPAddress = HanNeng.Common.GetClientIP.GetRealIP(); //获取当前用户的IP地址

28 atrr = property.GetCustomAttributes(typeof(Model.Atrributes.ModifyFields), false)[0] as Model.Atrributes.ModifyFields;

29 history.ModifyField = property.Name; //修改的字段名称

30 history.ModifyFieldName = atrr.FieldsName; //修改的字段中文名称

31

32 new BLL.PerFileHistory().AddModel(history);

33 }

34 }

35 //}

36 }

37 }

38 }

复制代码

  2.获取字段中文名,这个是在Model的类名里设置,站群软件,示例如下:

复制代码

1 /// <summary>

2 /// 获取字段名称

3 /// </summary>

4 public class ModifyFields : Attribute

5 {

6 public ModifyFields()

7 {

8 }

9 public ModifyFields(string name)

10 {

11 this.FieldsName = name;

12 }

13 /// <summary>

14 /// 修改的字段中文名

15 /// </summary>

16 public string FieldsName

17 {

18 get;

19 set;

20 }

21 }

复制代码

复制代码

1 /// <summary>

2 /// 科部

3 /// </summary>

4 [Atrributes.ModifyFields("科部")]

5 public int? SubjectDep

6 {

7 set { _subjectdep = value; }

8 get { return _subjectdep; }

9 }

复制代码

  3.调用方式示例:

复制代码

1 if (id != null)

2 {

3 Model.PersonFile Person = bllPerson.GetModel<Model.PersonFile>(id);

4 if (modelPerson != null)

5 {

6 Model.Identity identity = Session["Identity"] as Model.Identity;

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网站制作 https://www.feimao666.com

上一篇:Python Module_pdb_DEBUG 方法 下一篇:最后一页