Just curious, is there any support for transactions on plain C# objects? Like
using (var transaction = new ObjectTransaction(obj)) { try { obj.Prop1
You can make a copy of the object prior to executing methods and setting properties. Then, if you don't like the result, you can just "roll back" to the copy. Assuming, of course, that you have no side-effects to contend with.