C#中如何记录实体的修改记录

430 次浏览次阅读

在各种管理系统中经常需要展示某条数据的过往变更记录,更清晰的展示该条数据的历史过程,也能更直观的追溯是谁变更了数据。数据变更往往会调用Update方法实现更新部分数据,可以在Update时使用反射对比新老数据的值,将变更的数据写入变更记录表中。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// 忽略对比字段
List<string> ignoreColumnList = new List<string> {
"Id",
"TypeId",
"StatusId",
"CreatedTime",
"UpdatedTime",
"CreatedUserId",
"CreatedRealName",
"CreatedUserName",
"UpdatedUserId",
"UpdatedUserName",
"IsDeleted"
};
Record record = new Record();
List<RecordData> recordDataList = new List<RecordData>();
record.TableId = entity.Id;
record.TableName = "Project";
record.OpName = "编辑";
record.Id = YitIdHelper.NextId();
record.CreatedUserId = long.Parse(userId);
record.CreatedUserName = userName;
string oldValue = "";
string newValue = "";
//通过反射获取编辑后实体的属性列表
var propertyList = entity.GetType().GetProperties();
foreach (var property in propertyList)
{
//如果name在忽略字段列表中就跳过判断
if (ignoreColumnList.Contains(property.Name))
{
continue;
}
//如果值相同也跳过
if (property.GetValue(entity) == property.GetValue(oldEntity))
{
continue;
}
//获取字段的注释内容,方便前台展示
object[] objs = property.GetCustomAttributes(typeof(CommentAttribute), true);
string commentText = "";
if (objs.Length > 0)
{
commentText = ((CommentAttribute)objs[0]).Comment;
}
oldValue = "";
newValue = "";
if (property.GetValue(oldEntity) != null)
{
oldValue = property.GetValue(oldEntity) + "";
}
if (property.GetValue(entity) != null)
{
newValue = property.GetValue(entity) + "";
}
if (oldValue == newValue)
{
continue;
}
//特殊字段的处理
//处理关联表、字典值等内容
if (property.Name == "OrganizerTitle")
{
//
//oldValue = 特殊取值
//newValue = 特殊取值
}
RecordData recordData = new RecordData
{
Id = YitIdHelper.NextId(),
RecordId = record.Id,
Field = property.Name,
FieldName = commentText,
OldValue = oldValue,
NewValue = newValue
};
//保存详细的变更内容
recordDataList.Add(recordData);
}
// 忽略对比字段 List<string> ignoreColumnList = new List<string> { "Id", "TypeId", "StatusId", "CreatedTime", "UpdatedTime", "CreatedUserId", "CreatedRealName", "CreatedUserName", "UpdatedUserId", "UpdatedUserName", "IsDeleted" }; Record record = new Record(); List<RecordData> recordDataList = new List<RecordData>(); record.TableId = entity.Id; record.TableName = "Project"; record.OpName = "编辑"; record.Id = YitIdHelper.NextId(); record.CreatedUserId = long.Parse(userId); record.CreatedUserName = userName; string oldValue = ""; string newValue = ""; //通过反射获取编辑后实体的属性列表 var propertyList = entity.GetType().GetProperties(); foreach (var property in propertyList) { //如果name在忽略字段列表中就跳过判断 if (ignoreColumnList.Contains(property.Name)) { continue; } //如果值相同也跳过 if (property.GetValue(entity) == property.GetValue(oldEntity)) { continue; } //获取字段的注释内容,方便前台展示 object[] objs = property.GetCustomAttributes(typeof(CommentAttribute), true); string commentText = ""; if (objs.Length > 0) { commentText = ((CommentAttribute)objs[0]).Comment; } oldValue = ""; newValue = ""; if (property.GetValue(oldEntity) != null) { oldValue = property.GetValue(oldEntity) + ""; } if (property.GetValue(entity) != null) { newValue = property.GetValue(entity) + ""; } if (oldValue == newValue) { continue; } //特殊字段的处理 //处理关联表、字典值等内容 if (property.Name == "OrganizerTitle") { // //oldValue = 特殊取值 //newValue = 特殊取值 } RecordData recordData = new RecordData { Id = YitIdHelper.NextId(), RecordId = record.Id, Field = property.Name, FieldName = commentText, OldValue = oldValue, NewValue = newValue }; //保存详细的变更内容 recordDataList.Add(recordData); }
// 忽略对比字段
List<string> ignoreColumnList = new List<string> {
                "Id",            
                "TypeId",
                "StatusId",                
                "CreatedTime",
                "UpdatedTime",
                "CreatedUserId",
                "CreatedRealName",
                "CreatedUserName",
                "UpdatedUserId",
                "UpdatedUserName",
                "IsDeleted"          
 };
Record record = new Record();
List<RecordData> recordDataList = new List<RecordData>();
record.TableId = entity.Id;
record.TableName = "Project";
record.OpName = "编辑";
record.Id = YitIdHelper.NextId();
record.CreatedUserId = long.Parse(userId);
record.CreatedUserName = userName;

string oldValue = "";
string newValue = "";
//通过反射获取编辑后实体的属性列表
var propertyList = entity.GetType().GetProperties();
 foreach (var property in propertyList)
 {
//如果name在忽略字段列表中就跳过判断
 if (ignoreColumnList.Contains(property.Name))
 {
     continue;
 }
 //如果值相同也跳过
 if (property.GetValue(entity) == property.GetValue(oldEntity))
 {
     continue;
 }
 //获取字段的注释内容,方便前台展示
 object[] objs = property.GetCustomAttributes(typeof(CommentAttribute), true);
 string commentText = "";
 if (objs.Length > 0)
 {
     commentText = ((CommentAttribute)objs[0]).Comment;
 }
 oldValue = "";
 newValue = "";
 if (property.GetValue(oldEntity) != null)
 {
     oldValue = property.GetValue(oldEntity) + "";
 }
 if (property.GetValue(entity) != null)
 {
     newValue = property.GetValue(entity) + "";
 }             
 if (oldValue == newValue)
 {
     continue;
 }
 //特殊字段的处理
 //处理关联表、字典值等内容
 if (property.Name == "OrganizerTitle")
 {
     // 
     //oldValue = 特殊取值
     //newValue = 特殊取值
 }
 RecordData recordData = new RecordData
 {
     Id = YitIdHelper.NextId(),
     RecordId = record.Id,
     Field = property.Name,
     FieldName = commentText,
     OldValue = oldValue,
     NewValue = newValue
 };
 //保存详细的变更内容
    recordDataList.Add(recordData);
}
正文完
 
马化云
版权声明:本站原创文章,由 马化云 2023-03-24发表,共计1557字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。