如何在交易中保存?

时间:2009-12-31 13:12:54

标签: c# wpf design-patterns transactions

考虑这种情况;假设我有WPF窗口,其中有四个对象绑定到其控件 (具体表是Schedule,Customer,Contract,ScheduleDetails和Signer),它代表后端数据库中的四个数据库表。我希望当用户请求保存他/她输入的信息时,在原子操作中加入另一个词,所有保存操作都在一个事务中,所以所有操作成功或全部失败。 我的问题是在这种情况下表示交易操作的最有效方法是什么

1 个答案:

答案 0 :(得分:4)

效率最高是在DbConnection上使用BeginTransaction等,但这不方便,因为您必须使用相同的连接,并且每个{{1需要transaction设置等。

最简单DbCommand,如果您使用的是SQL-Server 2005或更高版本,您很少会注意到它与TransactionScope之间存在显着的性能差异:

BeginTransaction

此处using(var tran = new TransactionScope()) { SaveA(); SaveB(); SaveC(); SaveD(); tran.Complete(); } 等使用相同的连接并不重要,因为SaveA会自动登记到SqlConnection

或者,让ORM为您处理;大多数人都会创建用于保存一组更改的交易。

要注意的一件事; TransactionScope依赖于所有客户端可能无法使用的服务(DTC)(因为您提到了WPF,即客户端)。