国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

.NET MVC通過反射獲取數據修改歷史記錄,并插入數據表中

2019-11-17 03:02:13
字體:
來源:轉載
供稿:網友

.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; //修改數據的ID27                             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         }
View Code

  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 FieldsName17         {18             get;19             set;20         }21     }
Model
1          /// <summary>2         /// 科部3         /// </summary>4         [Atrributes.ModifyFields("科部")]5         public int? SubjectDep6         {7             set { _subjectdep = value; }8             get { return _subjectdep; }9         }
Model類名示例

  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; 7                         //if (identity.RoleIDs.ToString() == "R01")  //如果是系統管理員,則不記錄歷史 8                         //{ 9                         //對前后數據的不同進行比較10                         Model.PersonFile OldPerson = Person;11                         Model.PersonFile NewPerson = modelPerson;12                         NewPerson.PersonAutoID = OldPerson.PersonAutoID;13                         IsUpdate(OldPerson, NewPerson, id);14                         //}15                     }16                 }
Controller.CS

  4.最終的效果圖:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武宁县| 紫云| 青浦区| 隆子县| 鄂托克前旗| 桐梓县| 自贡市| 萨嘎县| 道孚县| 双鸭山市| 周至县| 上犹县| 宾阳县| 林口县| 龙陵县| 奇台县| 定结县| 盱眙县| 陵川县| 定州市| 蕲春县| 隆林| 珲春市| 唐山市| 界首市| 易门县| 屏东市| 三台县| 丰镇市| 塔河县| 乌兰察布市| 芒康县| 馆陶县| 河源市| 凤冈县| 绥德县| 新邵县| 静宁县| 隆尧县| 井陉县| 承德县|