0

我想要的:一个记录修改后变化的功能

在我的应用程序中,人们可以修改数据,我想记录修改了哪些数据

我试过的:通用

我用的是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:

我该如何解决这个错误,或者有其他方法可以解决我的问题吗?

4

0 回答 0