我想要的:一个记录修改后变化的功能
在我的应用程序中,人们可以修改数据,我想记录修改了哪些数据
我试过的:通用
我用的是abp,需要比较entity(旧数据)和InputDto(新数据),所以我写了一个函数把entity或者dto转成字典,然后比较两个字典的区别获取更改。
这是我的转换功能:
public static Dictionary<string, string> ConverModelToDict<T>(T model)
{
Type t = model.GetType();
PropertyInfo[] propertyList = t.GetProperties();
Dictionary<string, string> result = new Dictionary<string, string>();
foreach (PropertyInfo item in propertyList)
{
string name = item.Name;
if (item.GetValue(model) != null)
{
object value = item.GetValue(model);
result.Add(name, value.ToString());
}
}
return result;
}
我编写了另一个函数来获取一个实体和一个 dto 进行比较:
public async Task<string> CompareEntityAndDto<T, K>(T oldModel, K newModel, string moduleName)
{
var oldDict = ConverModelToDict(oldModel);
var newDict = ConverModelToDict(newModel);
string result = "";
foreach (var key in newDict.Keys)
{
if (oldDict.ContainsKey(key) && newDict[key] != oldDict[key])
{
var value = "【" + oldDict[key] + "】" + "changeTo" + "【" + newDict[key] + "】";
result += key + ":" + value + ";";
}
}
string detial = moduleName + result;
return detial;
}
oldModel
是作为数据库查询结果的实体,是newmodel
来自表单数据的 dto,moduleName
只是一个字符串,这就是我在应用程序中调用函数的方式
await _compareAppService.CompareEntityAndDto(query, input, "somestring");
我得到了错误:
System.NotImplementedException:IsValid(object value) 尚未由此类实现。首选入口点是 GetValidationResult(),类应覆盖 IsValid(object value.ValidationContext context)。在 System.ComponentModel.DataAnnotations.ValidationAttribute.IsValid(Object value.ValidationContext validationContext) at System.ComponentModel.DataAnnotations.ValidationAttribute.GetValidationResult(Object value.ValidationContext validationContext) at Abp.Runtime.Validation.Interception.DataAnnotationsValidator.GetDataAnnotationAttributeErrors(Object validatingObject)在 D:\Github\aspnetboilerplate\src\Abp\Runtime\Validation\Interception\DataAnnotationsValidator.cs:第 38 行 Abp.Runtime.Validation.Interception.MethodInvocationValidator.SetValidationErrors(Object validatingObject) 在 D:
我该如何解决这个错误,或者有其他方法可以解决我的问题吗?