Анулиране на всички промени и връщане към първоначалните данни чрез дълбоко копиране

В моето приложение съхранявам всички данни в статичен списък AllData, който е наследен от;

public class GenericList<T> : BindingList<T>, IList<T> 

Зададох промените на потребителя в избрания елемент от AllData и проблемът ми е свързан с анулирането на промените. Ако потребителят отмени промените, извличам отново всички данни от базата данни. Това не е полезно решение; отнема време, създава нова db връзка и т.н.

Мисля, че вече имам стари ценности преди промените. Мога да архивирам първите стойности и ако потребителят отмени промените, да възстановя архивираните стойности. Проблемът идва тук; Опитах се да клонирам избрания елемент от AllData чрез клас ObjectCopier

public static T Clone<T>(T source)

, и получи грешка като

Типът „Клас XYZ“ не е маркиран като сериализираем.

Да, имам няколко сериализирани класа, а другите не са сериализирани. Избраният от AllData елемент, който се опитвам да клонирам, съдържа всички типове данни, които създадох.

Трябва ли да сериализирам всички класове? Ако отговорът е да; може ли това да причини проблеми (сигурност, производителност и т.н.)? или има някакъв полезен метод за отмяна на операция?


person Furkan Ekinci    schedule 28.05.2013    source източник
comment
Ако търсите обобщена undo функция, погледнете CSLA рамката на Rockford Lhotka.   -  person Robert Harvey    schedule 28.05.2013
comment
stackoverflow.com/questions/3448943/   -  person Dave Bish    schedule 28.05.2013