DevForce does not support your transactional approach. We do transactional saves as part of the SaveChanges method, but we do not support the ability to start a transaction, do a whole bunch of database operations, and then rollback the entire set of database operations. According to our CTO, supporting long running transactions of this type is a bad idea. Instead he believes that you should start and complete transactions as quickly as possible.
I agree with you that CheckPointing is not the ultimate answer. While Checkpointing may be a great solution the vast majority of the time, a big problem is that if the application crashes, there is no way to undo the database changes.
Our current strategy is to develop a “Cleanup” test that restores the database by programmatically applying fixes to the database. For example, we may delete all employees with an ID greater than 1000 after first deleting all of their orders and order details.
At some point in the future, we may develop a more robust solution by using database restore.