2012-03-15 20 views
2

私のコードでメンバーシッププロバイダを使用して新しいユーザーを作成し、次にオブジェクトを作成してEntity Frameworkの1つに入れるトランザクションを設定しようとしていますテーブル。 EF操作が失敗した場合、ユーザーを作成する前にロールバックできるようにしたい。私はEFとメンバシップの両方のための単一の接続文字列を持っているので、両方の操作が同じSQL接続を使用する必要があると思います。TransactionScopeをEntity Frameworkコードで使用する最初のコードとユニバーサルプロバイダ

私が最初にそれを実行すると、私は

を得る "サーバー上でMSDTCを...使用できません。"

Membership.CreateUser行の例外。私はDTCサービスを開始すると、私は内部例外

「と

「基になるプロバイダーがオープンに失敗しました」

例外は、操作が状態のために有効ではありません取得しますトランザクションの。

同じ行にあります。順序を変更してEFを最初に保存してからメンバーシップを行うと、EFの部分は機能しますが、CreateUserは同じ例外を除いて失敗します。

1つの接続文字列があっても2つのsql接続が使用されているようです。メンバーシップとEFの両方の操作に同じ接続を使用させる方法はありますか、これをトランザクションの内部に入れるための他の方法がありますか?

uは、トランザクションのスコープが自動的にDTC

にエスカレートそして限り私が知っているuは、彼らが別の接続を使用EFと会員の両方に同じ接続文字列を使用しても言うようにここでコード

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required)) 
{ 
    MembershipCreateStatus createStatus; 
    MembershipUser user = Membership.CreateUser(model.UserName, model.Password, model.UserName, null, null, true, null, out createStatus); 

    //add objects to the DbContext db 

    db.SaveChanges(); 
    scope.Complete(); 

答えて

0

ですSqlMembershipProvider

にカスタム接続を置くことはできません

の両方に同じ接続を使用しますDTC

関与を避けるために this link

に応じ

関連する問題