【发布时间】:2009-01-20 18:50:22
【问题描述】:
我必须在 Windows 应用程序中作为事务执行 3 个操作。这些不是 SQL 操作,否则我会使用 TransactionScope。第一个操作是在数据库中记录一些值,第二个是将电子邮件移动到 pst,第三个是将电子邮件移动到另一个邮箱。如果这些操作失败,我希望其他操作回滚到以前的状态。有什么办法,这笔交易可以实现。
【问题讨论】:
标签: c# transactions
我必须在 Windows 应用程序中作为事务执行 3 个操作。这些不是 SQL 操作,否则我会使用 TransactionScope。第一个操作是在数据库中记录一些值,第二个是将电子邮件移动到 pst,第三个是将电子邮件移动到另一个邮箱。如果这些操作失败,我希望其他操作回滚到以前的状态。有什么办法,这笔交易可以实现。
【问题讨论】:
标签: c# transactions
您可以使用自己的 ResourceManager 并使用System.Transactions 来帮助您处理事务。
http://www.codeguru.com/csharp/.net/net_data/sortinganditerating/article.php/c10993__1/
但根据复杂性以及您需要它的频率,它可能是一个过于复杂的解决方案。
【讨论】:
除非您的电子邮件后端支持 DTC,否则您可以使用TransactionScope;请注意,TransactionScope 不仅限于 SQL 提供者;一些中间件工具支持它,甚至还有一个基于TransactionScope 的.NET 对象(不是any 对象——只有那些使用库的基类/属性包/等编写的对象)。
就目前而言,您可能必须手动回滚。
【讨论】:
如果每个包含的操作都有适当的事务支持,那么“按规定”进行事务很容易,否则尝试以自己的 DIY 方式单独支持(提交/回滚)每个操作将是一场噩梦 :)
正如 Marc 指出的那样,手动操作将是更简单的选择。
【讨论】: