C# 属性集合/标记
本文关键字:标记 集合 属性 | 更新日期: 2023-09-27 18:30:54
我遇到过一种情况,即我有由数据库生成的数据类,其中包含各种属性,例如我无法修改。
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)
}
关于我如何做到这一点的任何帮助(如果可能的话)将不胜感激!
我建议创建一个支持对相关属性进行脏标记的 DTO(数据传输对象)。这样,您的类就可以保持不变。看看自动映射器。
再说一次,我邀请您重新考虑您的断言,即更新完整的属性集效率低下,假设它们是简单的类型。写入数据库中的整行通常并不比写入单个列的成本高。在您描述的情况下,我会更关心并发性。
我认为视图模型适合这里。
视图模型是视图的抽象或数据的概念状态,而不是模型中数据的真实状态。
所以在这种情况下,你将有一个类似这样的类:
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()
{
}
}
您可以在此处阅读有关视图模型的更多信息:
模型-视图-视图模型 (MVVM) 说明
我们如何做 MVC – 查看模型什么是 MVC 中的 ViewModel?
尽管文章指出了 MVC/MVVM UI 体系结构,但视图模型是一个相当笼统的概念。