我正在寻找解决设计问题的方法。这需要一些解释。我会发布代码,但是这会让这个更长。
我有一个自定义通用集合,用于根据需要保存Business Objects。为便于参考,请调用业务对象 BO 和通用集合 GC 。在GC内部,我有一个私有的那些被标记为删除的业务对象的集合。将此私人收藏称为 PDC 。
我可以在任何时候拥有任意数量的GC,每个都有自己的PDC,以及不在任何集合中的其他BO。
当我保存更改时,我遍历所有BO和GC并让每个更改保存。这种情况发生在TransactionScope中,因此如果无法正确保存,我会回滚数据库更改。
当GC保存时,我的PDC状态有问题。 GC首先保存所有带有更新的BO,然后删除与PDC中的BO关联的记录,然后清除所有BO的PDC 。我这样做,所以GC的状态正确反映了数据库的新状态。
现在假设在GC成功保存一个或多个GC后,BO或GC无法保存。 TransactionScope执行回滚。从数据库中删除的记录将被恢复,但部分/全部PDC已被清除,状态信息丢失。
所以这是我的问题:如何保持PDC信息,直到提交发生,然后保证适当的集合被清除?
TransactionScope没有任何事件我可以告诉我何时提交更改。任何给定的事务都可能影响MANY BO和GC,因此我不能限制事务一次处理一个GC。
有什么建议吗?
答案 0 :(得分:2)
TransactionStarted由事务管理器引发,TransactionCompleted由事务本身引发。
您可能希望GC实施IEnlistmentNotification;有一个例子可以帮助你。
您可能还想查看DNR TV show 113和114。