[英]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.