所以我理解你可以通过使用像这样的操作上的属性来自动创建交易:
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
在这样的界面上:
[TransactionFlow(TransactionFlowOption.Mandatory)]
我也知道在从数据库读取时可以使用ADO.Net创建事务,所以我的问题是哪个是最佳选择?在WCF级别或数据库级别?或者它取决于具体情况?
答案 0 :(得分:1)
ADO.NET(local)事务直接绑定到数据库连接(SqlConnection),这意味着您必须继续传递连接并且不允许跨数据库工作。这是您最快的选择。
WCF方式允许您进行环境事务。除了您注意到的属性外,您还需要TransactionScope。 TransactionScope的一个优点是它不仅仅与数据库联系在一起。任何交易意识提供者都可以使用它。此外,它还可以处理跨多个连接的事务。如果您需要使用多个数据源,MSDTC将发挥作用。 MSDTC实现两阶段提交协议。分布式事务比本地事务慢。
所以答案是 - 它真的取决于你的要求。但是,如果您只处理单个数据库上的CRUD操作,那么ADO.NET事务就足够了。