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