簡體   English   中英

c#property collection / flagging

[英]c# property collection/flagging

我有一種情況,我有數據類,由具有各種屬性的數據庫生成,例如我無法修改。

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

}

其中一些類可能有20個左右的屬性。 在更新數據時,會生成“持久”數據的“瞬態”副本,然后在瞬態上更新屬性並從瞬態復制到持久性。

雖然只改變一個屬性效率不高,但這很好。

我想知道在c#中是否有一種方法可以創建一個標記屬性列表,或者將屬性添加到我希望更新的某些標記屬性上。

所以最終的結果是(請注意這都是偽的)

 DataClass transientObj = new DataClass(Transient);
 [FlagPropertyToUpdate] //This is the bit I have no idea how to do
 transientObj.propertyX = "updateOnlyMe!";
 DataClass persistantObj = new DataClass(Persistant);
 UpdateData dataUpdater = new UpdateData(transientObj,persistantObj)

 dataUpdater.save();

 public UpdateData 
 {
      public void save(){
          //some how know to only update propertyX and not all three properties
      }  
      public UpdateData(DataClass trans, DataClass pers)
 }

任何有關如何做到這一點(如果可能的話)的幫助將受到高度贊賞!

我認為View Model適合這里。

ViewModel是View的抽象或數據的概念狀態,而不是Model中數據的真實狀態。

所以在這種情況下你會有一個類:

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()
    {
    }
}

您可以在此處閱讀有關視圖模型的更多信息:

Model-View-ViewModel(MVVM)解釋
我們如何做MVC - 查看模型 MVC中的ViewModel是什么?

雖然文章指向MVC / MVVM UI架構,但視圖模型是一個非常普遍的概念。

我建議創建一個支持臟標記相關屬性的DTO(數據傳輸對象)。 這樣你的課程就可以保持不變。 看看Automapper

然后,我再次邀請您重新考慮您的斷言,即更新完整的屬性集是低效的,假設它們是簡單類型。 寫入數據庫中的整行通常並不比編寫單個列更昂貴。 在你描述的情況下,我會更關注並發性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM