考虑这种情况;假设我有WPF窗口,它有四个对象绑定到其控件 (Schedule,Customer,Contract,ScheduleDetails和Signer),它们代表后端数据库中的四个数据库表。我希望当用户请求保存他/她在原子操作中加入的信息时,换句话说,所有的保存操作都在一个事务中,以使所有操作成功或全部失败。 我的问题是什么是代表在这种情况下如何在交易中保存?
3
A
回答
4
事务操作的最有效的方式最有效是使用BeginTransaction
等您DbConnection
,但这并不方便,因为你必须使用相同的连接,每个DbCommand
需要transaction设置等
的简单是TransactionScope
,如果你是SQL-Server 2005或以上,你很少会注意到这一点,并BeginTransaction
之间显著的性能差异:
using(var tran = new TransactionScope()) {
SaveA();
SaveB();
SaveC();
SaveD();
tran.Complete();
}
这并不重要,如果SaveA
等使用相同的连接,如SqlConnection
将自动登记到一个TransactionScope
。
或者,让一个ORM为你处理;大多数会创建交易以保存一组更改。
有一点要注意; TransactionScope
依赖于可能不适用于所有客户端的服务(DTC)(因为您提到的是客户端的WPF)。
相关问题
- 1. 如何保存或存储SKPayment交易?
- 2. Django的:保存交易
- 3. 如何在一次交易中保存相关模型?
- 4. 如何在交易Yii 1 *中获得保存的模型ID?
- 5. Ebean manyToMany没有保存在交易
- 6. Django - 如何在保存表单时进行交易?
- 7. mongodb中的交易保证
- 8. 使用交易进行多次保存
- 9. Pimcore - 使用交易保存对象
- 10. 休眠保存方法 - 交易
- 11. mysql,vb.net - 保存交易不起作用
- 12. Django - 回滚保存与交易原子
- 13. 交易如何保持安全
- 14. 在交易中包装交易存储过程
- 15. 在C#中的交易中的交易#
- 16. 如何在Subversion中保存提交?
- 17. 如何把在交易
- 18. 如何,而在交易
- 19. Yodlee-交易存储
- 20. 如何保持交易的运行余额并获得交易后的金额
- 21. 如何在knex中实现交易?
- 22. 如何在VoltDB中实现交易?
- 23. 如何在Access中实现交易?
- 24. 如何在liferay中实现交易?
- 25. 如何在碎片中进行交易?
- 26. 如何在雪花中使用交易?
- 27. 如何在'developer.paypal.com'中显示交易
- 28. 如何在Authorize.net中退款交易?
- 29. Firebase:客户交易和云功能交易存在差异吗?
- 30. 如何处理从交易表中删除交易
如果您使用TransactionScope,请确保您的目标机器具有运行的DTC - 分布式事务处理协调器服务,否则您将收到异常。 – 2009-12-31 13:29:45
@Chris - 我刚刚编辑完毕;-p – 2009-12-31 13:30:27
@Mark,谢谢。但是DTC和Transaction类之间有一个关系 - 我不记得什么时候谈到图片 - 但是我想避免使用DTC的开销,尽管我喜欢Transaction类的简单形式。 DTC交易有没有办法入伍? – 2009-12-31 13:34:36