在操作数据记录时,对重要的数据,我们需要记录每一次的变更,有没有好的方法呢?

在通用权限管理系统中提供了记录数据表信息变更的方法。

一、先看看效果截图

如何记录数据表信息的变更

二、再看看修改记录表的表结构

如何记录数据表信息的变更

三、对该表访问的业务类

  1     public partial class ModifyRecordManager : BaseManager, IBaseManager
  2     {
  3         /// <summary>
  4         /// 构造函数
  5         /// </summary>
  6         public ModifyRecordManager()
  7         {
  8             if (base.dbHelper == null)
  9             {
 10                 base.dbHelper = DbHelperFactory.GetHelper(BaseSystemInfo.BusinessDbType, BaseSystemInfo.BusinessDbConnection);
 11             }
 12             if (string.IsNullOrEmpty(base.CurrentTableName))
 13             {
 14                 base.CurrentTableName = ZTO_QUOTE_MODIFYRECORDEntity.TableName;
 15             }
 16             base.PrimaryKey = "Id";
 17         }
 18 
 19         /// <summary>
 20         /// 构造函数
 21         /// <param name="tableName">指定表名</param>
 22         /// </summary>
 23         public ModifyRecordManager(string tableName)
 24         {
 25             base.CurrentTableName = tableName;
 26         }
 27 
 28         /// <summary>
 29         /// 构造函数
 30         /// </summary>
 31         /// <param name="dbHelper">数据库连接</param>
 32         public ModifyRecordManager(IDbHelper dbHelper)
 33             : this()
 34         {
 35             DbHelper = dbHelper;
 36         }
 37 
 38         /// <summary>
 39         /// 构造函数
 40         /// </summary>
 41         /// <param name="userInfo">用户信息</param>
 42         public ModifyRecordManager(BaseUserInfo userInfo)
 43             : this()
 44         {
 45             UserInfo = userInfo;
 46         }
 47 
 48         /// <summary>
 49         /// 构造函数
 50         /// </summary>
 51         /// <param name="userInfo">用户信息</param>
 52         /// <param name="tableName">指定表名</param>
 53         public ModifyRecordManager(BaseUserInfo userInfo, string tableName)
 54             : this(userInfo)
 55         {
 56             base.CurrentTableName = tableName;
 57         }
 58 
 59         /// <summary>
 60         /// 构造函数
 61         /// </summary>
 62         /// <param name="dbHelper">数据库连接</param>
 63         /// <param name="userInfo">用户信息</param>
 64         public ModifyRecordManager(IDbHelper dbHelper, BaseUserInfo userInfo)
 65             : this(dbHelper)
 66         {
 67             UserInfo = userInfo;
 68         }
 69 
 70         /// <summary>
 71         /// 构造函数
 72         /// </summary>
 73         /// <param name="dbHelper">数据库连接</param>
 74         /// <param name="userInfo">用户信息</param>
 75         /// <param name="tableName">指定表名</param>
 76         public ModifyRecordManager(IDbHelper dbHelper, BaseUserInfo userInfo, string tableName)
 77             : this(dbHelper, userInfo)
 78         {
 79             base.CurrentTableName = tableName;
 80         }
 81 
 82         /// <summary>
 83         /// 添加, 这里可以人工干预,提高程序的性能
 84         /// </summary>
 85         /// <param name="entity">实体</param>
 86         /// <param name="identity">自增量方式,表主键是否采用自增的策略</param>
 87         /// <param name="returnId">返回主键,不返回程序允许速度会快,主要是为了主细表批量插入数据优化用的</param>
 88         /// <returns>主键</returns>
 89         public string Add(ZTO_QUOTE_MODIFYRECORDEntity entity, bool identity = true, bool returnId = true)
 90         {
 91             this.Identity = identity;
 92             this.ReturnId = returnId;
 93             entity.Id = int.Parse(this.AddObject(entity));
 94             return entity.Id.ToString();
 95         }
 96 
 97         /// <summary>
 98         /// 更新
 99         /// </summary>
100         /// <param name="entity">实体</param>
101         public int Update(ZTO_QUOTE_MODIFYRECORDEntity entity)
102         {
103             return this.UpdateObject(entity);
104         }
105 
106         /// <summary>
107         /// 获取实体
108         /// </summary>
109         /// <param name="id">主键</param>
110         public ZTO_QUOTE_MODIFYRECORDEntity GetObject(string id)
111         {
112             return GetObject(int.Parse(id));
113         }
114 
115         public ZTO_QUOTE_MODIFYRECORDEntity GetObject(int id)
116         {
117             return BaseEntity.Create<ZTO_QUOTE_MODIFYRECORDEntity>(this.GetDataTable(new KeyValuePair<string, object>(this.PrimaryKey, id)));
118         }
119 
120         /// <summary>
121         /// 添加实体
122         /// </summary>
123         /// <param name="entity">实体</param>
124         public string AddObject(ZTO_QUOTE_MODIFYRECORDEntity entity)
125         {
126             string key = string.Empty;
127             SQLBuilder sqlBuilder = new SQLBuilder(DbHelper, this.Identity, this.ReturnId);
128             sqlBuilder.BeginInsert(this.CurrentTableName, this.PrimaryKey);
129             if (!this.Identity)
130             {
131                 // 这里已经是指定了主键了,所以不需要返回主键了
132                 sqlBuilder.ReturnId = false;
133                 sqlBuilder.SetValue(this.PrimaryKey, entity.Id);
134             }
135             else
136             {
137                 if (!this.ReturnId && (DbHelper.CurrentDbType == CurrentDbType.Oracle || DbHelper.CurrentDbType == CurrentDbType.DB2))
138                 {
139                     if (DbHelper.CurrentDbType == CurrentDbType.Oracle)
140                     {
141                         sqlBuilder.SetFormula(this.PrimaryKey, "SEQ_" + this.CurrentTableName.ToUpper() + ".NEXTVAL ");
142                     }
143                     if (DbHelper.CurrentDbType == CurrentDbType.DB2)
144                     {
145                         sqlBuilder.SetFormula(this.PrimaryKey, "NEXT VALUE FOR SEQ_" + this.CurrentTableName.ToUpper());
146                     }
147                 }
148                 else
149                 {
150                     if (this.Identity && (DbHelper.CurrentDbType == CurrentDbType.Oracle || DbHelper.CurrentDbType == CurrentDbType.DB2))
151                     {
152                         BaseSequenceManager sequenceManager = new BaseSequenceManager(DbHelper);
153                         entity.Id = int.Parse(sequenceManager.Increment(this.CurrentTableName));
154                         sqlBuilder.SetValue(this.PrimaryKey, entity.Id);
155                     }
156                 }
157             }
158             this.SetObject(sqlBuilder, entity);
159             if (UserInfo != null)
160             {
161                 sqlBuilder.SetValue(ZTO_QUOTE_MODIFYRECORDEntity.FieldCreateUserId, UserInfo.Id);
162                 sqlBuilder.SetValue(ZTO_QUOTE_MODIFYRECORDEntity.FieldCreateBy, UserInfo.RealName);
163             }
164             sqlBuilder.SetDBNow(ZTO_QUOTE_MODIFYRECORDEntity.FieldCreateOn);
165             if (this.Identity && (DbHelper.CurrentDbType == CurrentDbType.SqlServer || DbHelper.CurrentDbType == CurrentDbType.Access))
166             {
167                 key = sqlBuilder.EndInsert().ToString();
168             }
169             else
170             {
171                 sqlBuilder.EndInsert();
172             }
173             if (this.Identity && (DbHelper.CurrentDbType == CurrentDbType.Oracle || DbHelper.CurrentDbType == CurrentDbType.DB2))
174             {
175                 return entity.Id.ToString();
176             }
177             return key;
178         }
179 
180         /// <summary>
181         /// 更新实体
182         /// </summary>
183         /// <param name="entity">实体</param>
184         public int UpdateObject(ZTO_QUOTE_MODIFYRECORDEntity entity)
185         {
186             SQLBuilder sqlBuilder = new SQLBuilder(DbHelper);
187             sqlBuilder.BeginUpdate(this.CurrentTableName);
188             this.SetObject(sqlBuilder, entity);
189             sqlBuilder.SetWhere(this.PrimaryKey, entity.Id);
190             return sqlBuilder.EndUpdate();
191         }
192 
193         // 这个是声明扩展方法
194         partial void SetObjectExpand(SQLBuilder sqlBuilder, ZTO_QUOTE_MODIFYRECORDEntity entity);
195 
196         /// <summary>
197         /// 设置实体
198         /// </summary>
199         /// <param name="entity">实体</param>
200         private void SetObject(SQLBuilder sqlBuilder, ZTO_QUOTE_MODIFYRECORDEntity entity)
201         {
202             SetObjectExpand(sqlBuilder, entity);
203             sqlBuilder.SetValue(ZTO_QUOTE_MODIFYRECORDEntity.FieldNEWKEY, entity.NEWKEY);
204             sqlBuilder.SetValue(ZTO_QUOTE_MODIFYRECORDEntity.FieldNEWVALUE, entity.NEWVALUE);
205             sqlBuilder.SetValue(ZTO_QUOTE_MODIFYRECORDEntity.FieldCOLUMNDESCRIPTION, entity.COLUMNDESCRIPTION);
206             sqlBuilder.SetValue(ZTO_QUOTE_MODIFYRECORDEntity.FieldOLDKEY, entity.OLDKEY);
207             sqlBuilder.SetValue(ZTO_QUOTE_MODIFYRECORDEntity.FieldOLDVALUE, entity.OLDVALUE);
208             sqlBuilder.SetValue(ZTO_QUOTE_MODIFYRECORDEntity.FieldRECORDKEY, entity.RECORDKEY);
209             sqlBuilder.SetValue(ZTO_QUOTE_MODIFYRECORDEntity.FieldCOLUMNCODE, entity.COLUMNCODE);
210             sqlBuilder.SetValue(ZTO_QUOTE_MODIFYRECORDEntity.FieldTABLEDESCRIPTION, entity.TABLEDESCRIPTION);
211             sqlBuilder.SetValue(ZTO_QUOTE_MODIFYRECORDEntity.FieldTABLECODE, entity.TABLECODE);
212         }
213 
214         /// <summary>
215         /// 删除实体
216         /// </summary>
217         /// <param name="id">主键</param>
218         /// <returns>影响行数</returns>
219         public int Delete(int id)
220         {
221             return this.Delete(new KeyValuePair<string, object>(this.PrimaryKey, id));
222         }
223     }
View Code

相关文章: