2013-09-10 3 views
0

У меня есть ситуация, когда у меня есть классы данных, которые генерируются базой данных с различными свойствами на них, например, которые I не могут изменить.C# property collection/flag

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

Любая помощь в том, как я мог бы идти об этом (и если его возможно) будут высоко оценены!

ответ

1

Я бы рекомендовал создать DTO (объект передачи данных), который поддерживает грязные флажки соответствующих свойств. Таким образом, ваши классы могут оставаться неизменными. Посмотрите на Automapper.

И снова я бы предложил вам пересмотреть свое утверждение о том, что обновление полного набора свойств неэффективно, если предположить, что они простые типы. Запись в целую строку в базе данных, как правило, не стоит дороже записи одного столбца. В ситуации, о которой вы описываете, я буду больше беспокоиться о параллелизме.

+0

Спасибо Эрик, я посмотрю. Эта база данных Jade http://www.jade.co.nz/jade/index.htm и полностью ориентирована на объект. Таким образом, свойства часто ссылаются на другие объекты. Я все еще делаю больше исследований, к сожалению, у программного обеспечения базы данных нет такой информации об этом, хотя это требование. –

+0

Учитывая, что Jade является коммерческим продуктом ORM, я бы предположил, что они разработали способы эффективного отслеживания того, какие объекты были сохранены в базе данных, и избежать ненужных усилий. Их все * raison d'etre * позволяет вам не думать о таких вещах. –

1

Я думаю, что модель модели подойдет здесь.

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

Вы можете прочитать больше о вид модели здесь:

Model-View-ViewModel (MVVM) Explained
How we do MVC – View models What is ViewModel in MVC?

Хотя статьи указывают к архитектуре UI MVC/MVVM, модель просмотра - довольно общая концепция.

+0

Спасибо Aseem, я рассмотрю это, программное обеспечение базы данных, которое использует эта компания (http://www.jade.co.nz/jade/index.htm), генерирует базовую модель, хотя у нее нет " RaisePropertyChanged ", к сожалению. Я буду продолжать читать. –