c#财产收集/标记

c#财产收集/标记,c#,database-design,C#,Database Design,在这种情况下,我有一个数据库生成的数据类,其中包含各种属性,例如,我不能修改这些属性 public DataClass { public string PropertyX {get; set;} public int PropertyY {get; set;} public float PropertyZ {get; set;} } 其中一些类可能有20个左右的属性。在更新数据时,将生成“持久”数据的“瞬态”副本,然后在瞬态上更新属性并将其从瞬态复制到持久 这很好,尽

在这种情况下,我有一个数据库生成的数据类,其中包含各种属性,例如,我不能修改这些属性

public DataClass
{
    public string PropertyX {get; set;}
    public int PropertyY {get; set;}
    public float PropertyZ {get; set;}

}
其中一些类可能有20个左右的属性。在更新数据时,将生成“持久”数据的“瞬态”副本,然后在瞬态上更新属性并将其从瞬态复制到持久

这很好,尽管只更改一个属性不是很有效

我想知道在c#中是否有一种方法可以创建标记属性的列表,或者将属性添加到我希望更新的某些标记属性上

因此最终结果将是(请注意,这都是伪的)


我将非常感谢您对我如何进行这项工作(如果可能的话)的任何帮助

我认为视图模型适合这里

ViewModel是视图的抽象或数据的概念状态,与模型中数据的真实状态相反

因此,在本例中,您将有一个类,如:

public DataClassViewModel
{
    //Define all relevant properties here.
    ...
    public DataClassViewModel(DataClass model) //Constructor
    {
       //Initialize the view model from the model. 
    }

    public DataClass GetModel()
    {
       //Depending on changes in the view model, model could be updated here.
    }

    public void UpdateData()
    {
    }
}
您可以在此处阅读有关视图模型的更多信息:




尽管这些文章指向MVC/MVVM UI体系结构,但视图模型是一个相当普遍的概念。

我建议创建一个DTO(数据传输对象),它支持脏标记相关属性。这样,您的类就可以保持不变。看一看


然后,我再次邀请您重新考虑您的断言,即更新完整的属性集是低效的,假设它们是简单类型。写入数据库中的整行通常不会比写入单个列更昂贵。在您描述的情况下,我更关心并发性。

谢谢Aseem,我会调查一下,这家公司使用的数据库软件()生成了一个基本模型,但不幸的是它没有“RaisePropertyChanged”的概念。我会继续读下去的。谢谢埃里克,我会调查的。所讨论的数据库是Jade,完全面向对象。因此,属性通常是对其他对象的引用。我还在做更多的研究,不幸的是,数据库软件没有那么多关于它的信息,尽管这是一个要求。鉴于Jade是一个商业ORM产品,我想他们已经找到了如何有效地跟踪哪些对象已被持久化到数据库中并避免不必要的工作。他们的全部理由是让你不必去想这些事情。
public DataClassViewModel
{
    //Define all relevant properties here.
    ...
    public DataClassViewModel(DataClass model) //Constructor
    {
       //Initialize the view model from the model. 
    }

    public DataClass GetModel()
    {
       //Depending on changes in the view model, model could be updated here.
    }

    public void UpdateData()
    {
    }
}