It's not at all hard to implement if you have a code generator.
We do this in our application for other reasons (our database concurrency model tests the previous values of changed fields, so we have to have the original value of anything that is changed).
Basically all we do is maintain a dictionary of the original fields and values. If one is changing and the field isn't already in the dictionary, then we add it.
It has come in very handy of other tasks. For example, if you change a property from A to B and then back to A, the property really isn't dirty anymore even though CSLA thinks the object itself is. We have some business rules that take advantage of this (e.g. if you broke a rule by changing a property, then you can unbreak the rule by changing it back to the original value without any further testing).
No, I haven't made any changes to CSLA. All my BO's derive from a common class between BusinessBase and the actual BO.
I can post sample property setter if it would help, but the idea is that there is "property changing" (versus "property changed") call in the setter. The property changing notification allows the base class to cache the previous value.
I haven't done anything similar with lists of BO's.
Copyright (c) Marimer LLC