5

我想知道在 C# 中是否有一种简单的方式来处理某种事务。假设我们有两个属性,我们想更新它们的值。我们可以写:

A = GetA();
B = GetB();

问题是,如果在分配 B 时抛出异常,则对象将处于不一致状态,因为 A 已更新。我们可以通过存储 A 的当前值并在处理 B 时捕获异常来解决这个问题:

var tempA = A;
A = GetA(); // A is up to date
try { B = GetB(); } catch { A = tempA; } // B is up to date also or A is reverted

即使上述解决方案也无法保存,因为在恢复 A 时可能会引发异常,但关键是,如果 .NET 中有内置机制可以简化此类操作?

我可以想象如下这样的陈述:

transaction { A = GetA(); B = GetB(); }

或代码构造,如:

Transaction.Enter();
A = GetA();
B = GetB();
Transaction.Leave();

在交易之前,机器状态将被存储,在交易之后它将被恢复以防异常。.NET 中有类似的东西吗?

4

3 回答 3

10

“TransactionScope 不仅仅针对数据库,每个实现 IEnlistmentNotification 接口的组件都可以参与事务范围的两阶段提交。

以下是事务性内存存储的示例:http: //www.codeproject.com/KB/dotnet/Transactional_Repository.aspx "

来源:https ://stackoverflow.com/a/2273902/1714342

我认为你可以实现这个IEnlistmentNotification接口并使用TransactionScope

于 2013-07-29T13:01:06.010 回答
4

您可以使用 TransactionScope 类。

例子:

using(var scope = new TransactionScope())
{
    DoAction1();
    DoAction2();

    scope.Complete();
}
于 2013-07-29T12:58:07.933 回答
2

对象事务没有内置功能。但是有一些第三方库提供了这个来支持对象状态管理。

你可以看看这个类似的问题。

https://stackoverflow.com/a/1765642/881798

于 2013-07-29T13:00:44.027 回答