2011-03-10 2 views
24

何かをするクラスを作成して、TransactionScopeで使用できるようにしたい場合は、実装する必要がありますか?TransactionScopeで動作するクラスを作成するには?

これは:私のクラスはトランザクション内にあることを認識する必要がありますが、コミットまたはロールバックでどのように通知されますか?ロールバックでは、実際にはどのようにロールバックしますか?

私のクラスには、変更の一時的なリストを変更するだけの "Add"、 "Update"、 "Delete"のようなメソッドと、トランザクション内にあるかどうかを検出して返すメソッドReadそれに応じて変更されたデータまたは変更されていないデータが必要ですが、私はコミット/ロールバックというメソッドが必要です。

私はTransaction.TransactionCompletedイベントを購読しますか?はいの場合、同じトランザクションに対する複数のサブスクリプションを避けるにはどうすればよいですか?

トランザクションにIDがないことに気付きました。複数の同時トランザクションまたはネストされたトランザクションを管理/ジャグリングする方法はありますか?

System.TransactionsのMSDNドキュメントには多くのコンテンツがありますが、それは実装者ではなく消費者を対象としているようですので、サービスがどのように優れているか(Webか書籍か)トランザクションのサポートを提供しますか?

私のクラスにはすでにトランザクションをサポートしている基本ストアがなく、単に "渡す"ことができます。

public class MyClass { 
    private List<MyObject> _businessData; 

    public void Create(Myobject data) { ... } 
    public MyObject Read(string query) { ... } 
    public void Update(Myobject data) { ... } 
    public void Delete(Myobject data) { ... } 
} 

答えて

14

This articleが必要とされるものの良い概要を説明していますのは、私のクラスは、次のようになりますと仮定しましょう。それは年を取っていますが、それでもすべてが適用されると思います。

この記事を要約すると、TransactionクラスのEnlistメソッドの1つを呼び出して、IEnlistmentNotificationの実装を渡す必要があります。

+0

誰かが不思議だったら、それはリンク#4で「System.Transactionに参加しました」 –

+1

ありがとうございました。この記事は概観ではありますが、深刻なものではありません(複数の並行トランザクションをサポートしている場合にどのトランザクションがコミットされるかなど)。しかしResource Managerをキーワードにすると、ギャップを埋めるhttp://msdn.microsoft.com/en-us/magazine/cc163688.aspxのような記事を見つけるのに役立ちました。 –