0

在构建 MVC Web 应用程序时,我仍在学习 C#。试图找到一种方法来创建用户在编辑操作期间更改的值列表。

这是我可以使用的一种方法:

public List<string> SaveVehicleTechnicalInformation(VehicleAssetTechnicalInformationViewModel editmodel)
    {
        // Create a list of fields that have changed
        List<string> changes = new List<string>();

        var record = db.VehicleAssetTechnicalInformations.Find((int)editmodel.RecordID);

        if (editmodel.Make != null && editmodel.Make != record.Make)
        {
            changes.Add(" [Make changed from " + record.Make + " to " + editmodel.Make + "] ");
            record.Make = editmodel.Make;
        }
        if (editmodel.Model != null && editmodel.Model != record.Model)
        {
            changes.Add(" [Model changed from " + record.Model + " to " + editmodel.Model + "] ");
            record.Model = editmodel.Model;
        }

        return changes;

    }

但是...如您所知,我需要为数据库中的每个字段编写一个 IF/ELSE 语句。那里大约有200个字段。我还担心要花很长时间才能完成这份清单。

是否有某种方法可以迭代地浏览我的对象的属性列表,将它们与数据库记录进行比较,在必要时更改它们,然后输出更改的列表。

在伪代码中,这就是我想我所追求的:

foreach (var field in editmodel)
        {
            if (field != database.field)
            {
                // Update the value
                // Write a string about what changed
                // Add the string to the list of what changed
            }
        }

因为我仍在学习,所以我会很感激关于阅读什么主题或我可以在哪里独立研究答案的指导/提示。目前,我的技能差距使我无法研究解决方案。

提前致谢。

4

2 回答 2

1

您可以尝试将反射用于您的目的。像这样的东西

var fields = editmodel.GetType().GetFields();
foreach (var item in fields)
{
    if (item.GetValue(editmodel) == database.field)
    {
        // Update the value
        // Write a string about what changed
        // Add the string to the list of what changed
    }
 }
于 2013-11-05T13:29:49.680 回答
0

我想我找到了我正在寻找的提示......

系统反射

更具体地说,FieldInfo.GetValue()方法。

我以前不知道 System.Reflection 是什么,所以我将进一步研究这个领域以找到我的解决方案。

于 2013-11-05T13:11:39.000 回答