我正在寻找设计问题的解决方案。这将需要一些解释。我会张贴代码,但这会让这个更长。TransactionScope和回滚对象状态
我有一个自定义泛型集合,用于根据需要保存Business Objects。为便于参考,请拨打业务对象BO和通用集合GC。内部GC我有一个私人收集那些已被标记为删除的业务对象。致电此私人收藏PDC。
我可以有任意数量的GC,每个都有自己的PDC,在任何时候,还有其他没有任何集合的BO。
当我保存更改时,我循环遍历所有BO和GC,并让每个保存更改。这发生在一个TransactionScope中,所以我回滚数据库的变化,如果有任何东西无法正确保存。
GC保存时我的PDC状态有问题。 GC首先保存所有更新的BO,然后删除与PDC中的BO相关的记录,然后清除所有BO的PDC。我这样做是为了使GC的状态正确地反映数据库的新状态。
现在假设一个或多个GC成功保存后,BO或GC未能保存。 TransactionScope执行回滚。从数据库中删除的记录被还原,但部分/所有的PDC已被清除,并且状态信息丢失。
所以这里是我的困惑:我如何保持PDC的信息,直到提交发生之后,然后保证清除了适当的集合?
TransactionScope没有任何事件我可以赶上让我知道什么时候它的变化已经提交。任何给定的交易都有可能受到许多交易所和GC的影响,所以我不能限制交易一次处理一个GC。
有什么建议吗?
这看起来很完美。感谢您的链接。这应该解决我的问题 – 2009-07-02 18:47:04