2

我正在寻找设计问题的解决方案。这将需要一些解释。我会发布代码,但这会使它变得更长。

我有一个自定义的通用集合,用于根据需要保存业务对象。为了便于参考,调用业务对象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 没有我可以捕捉到的事件来让我知道何时提交了更改。任何给定事务都可能影响许多 BO 和 GC,因此我不能将事务限制为一次处理一个 GC。

有什么建议么?

4

1 回答 1

2

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

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

您可能还想查看DNR 电视节目 113114

于 2009-07-02T18:32:56.940 回答