2016-07-19 11 views
1

だから私はあなたがこのような操作上の属性を使用してWCFによって自動的に作成されたトランザクションを持つことができることを理解する:トランザクションがWCFサービスレベルまたはデータベースアクセスレベルにある必要がありますか?

[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)] 

そして、このようなインターフェイスに:

[TransactionFlow(TransactionFlowOption.Mandatory)] 

私もそのトランザクションを知っています私の質問が最高のオプションですので、データベースから読み取るときにADO.Netを使用して作成することができますか? WCFレベルまたはデータベースレベル?それともそれは特定のシナリオに依存していますか?

+0

これは具体的なシナリオに依存します - はい、それはありますか。トランザクションで何をしようとしていますか?そのデータの整合性だけでなく、ADO.netで十分です。 –

答えて

1

ADO.NET(local)トランザクションはデータベース接続(SqlConnection)に直接結びついています。つまり、接続を継続して渡す必要があり、データベース間の相互運用ができません。これはあなたの最速のオプションです。

WCFの方法では、アンビエントトランザクションが可能です。あなたが指摘した属性に加えて、TransactionScopeも必要です。 TransactionScopeのメリットの1つは、データベースに結びついていないことです。どのトランザクション対応のプロバイダでも使用できます。さらに、複数の接続にまたがるトランザクションを処理できます。 MSDTCは、複数のデータソースを処理する必要がある場合に有効です。 MSDTCは2フェーズコミットプロトコルを実装しています。分散トランザクションは、ローカルトランザクションよりも低速です。

答えは - 実際はあなたの要件になります。ただし、単一のデータベースでCRUD操作のみを処理する場合は、ADO.NETトランザクションで十分です。

関連する問題