【问题标题】:TransactionScope and rolling back object stateTransactionScope 和回滚对象状态
【发布时间】:2009-07-02 18:03:57
【问题描述】:

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

我有一个自定义的通用集合,用于根据需要保存业务对象。为了便于参考,请调用业务对象 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。

有什么建议吗?

【问题讨论】:

    标签: collections state transactionscope


    【解决方案1】:

    TransactionStarted 由事务管理器提出,而 TransactionCompleted 由事务本身提出。

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

    您可能还想查看DNR TV show 113114

    【讨论】:

    • 这看起来很完美。也感谢您的链接。这应该可以解决我的问题
    猜你喜欢
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2010-10-04
    • 1970-01-01
    相关资源
    最近更新 更多