2009-07-02 62 views
2

我正在寻找设计问题的解决方案。这将需要一些解释。我会张贴代码,但这会让这个更长。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。

有什么建议吗?

回答

2

TransactionStarted由事务管理器引发,TransactionCompleted由事务本身引发。

您可能希望GC实施IEnlistmentNotification;有一个例子可以帮助你。

您可能还想检查DNR TV show 113114

+0

这看起来很完美。感谢您的链接。这应该解决我的问题 – 2009-07-02 18:47:04