如何对表中数据的修改做历史记录
送给老师的贺卡图片
如何对表中数据的修改做历史记录现在有⼀张表User好听的游戏名字男孩
⾥⾯字段如下
UserID ⽤户帐号(唯⼀不可修改)
UserName ⽤户名
Phone ⼿机号
Email 邮箱
CreateTime 创建时间
UpdateTime 更新时间
⽐较low的⽅式是建⽴⼀个记录表User_Record
同样包含以上字段,每次修改插⼊⼀条修改之前的记录,这样有两个弊端
1.数据冗余,及时⾄修改了⼀个字段也要插⼊⼀整条记录
2.不利于扩展,如果主表新增字段,记录表User_Record也要相应增加,违背了DRY原则
古代女子用什么画眉
所以,在此提出⼀个相对优秀的解决⽅案
新建⼀个UpdateEvent表,有如下字段
EVENT_ID ⾃增ID
VERSION 版本号
OBJECT_TYPE 源数据的表名或者能唯⼀对应的源数据表的标识均可(可以看到此表⽀持多表进⾏扩展)
当然,也可根据业务需求⾃⾏定义类别
OBJECT_ID 源数据表主键
FIELD_NAME 修改的源数据表的字段名
OBJECT_CODE 源数据表主键对应的CODE(可以忽略)
FIELD_OLD_VALUE 该字段原来的值
FIELD_NEW_VALUE 该字段最新的值
每次我们进⾏更新操作的时候,⾸先获取修改之前的实体oldUser和修改之后的newUser
然后通过反射进⾏两个版本的⽐较,获得AuditData列表插⼊到数据库
public class AuditData
{
public string EVENT_ID {get;set;}
public string VERSION  {get;set;}
public string OBJECT_TYPE  {get;set;}
public string OBJECT_ID  {get;set;}
public string OBJECT_CODE  {get;set;}
public string FIELD_NAME  {get;set;}
公司起名用字大全三字
public string FIELD_OLD_VALUE  {get;set;}
public string FIELD_NEW_VALUE  {get;set;}
List<AuditData> auditDataList = new List<AuditData>();
PropertyInfo[] userPropertys = newUser.GetType().GetProperties();
for (int i = 0; i < userPropertys.Length; i++)
{
SorMember sor = SorMemberFactory.GetSorMember(userPropertys[i]);
if (!sor.HaveMapAttribute)
{
string propertyName = userPropertys[i].Name;
null));
string newPropertyValue = Convert.ToString(userPropertys[i].GetValue(newUser, null
if (version == "1")
{
if (!string.IsNullOrEmpty(newPropertyValue))
{
AuditData auditData = new AuditData(eventId, version, "USER", newUser.UserId, newUser.UserUid, this.GetFieldName(newUser.GetType(), propertyName), string.Empty, newPropertyValue);
this
auditDataList.Add(auditData);
}
}
else
{
this.GetPropertyValue(oldUser, propertyName);
string oldPropertyValue = this
if (newPropertyValue != oldPropertyValue)世界手表品牌排名
{
AuditData auditData = new AuditData(eventId, version, "USER", newUser.UserId, newUser.UserUid, this.GetFieldName(newUser.GetType(), propertyName), oldPropertyValue, newPropertyValue);
this
dear johnauditDataList.Add(auditData);
}
}
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。