2016-06-02 20 views
2

私はコントローラとリポジトリを持っています。 EF 6を使用して変更を保存した後のロールバック

コントローラファイル

int userID = _myrepository.addCustomer(model) 

私が取得するユーザーID

その後、

支払いをするためにサードパーティ製のプラグインを使用して(例:)

var success = makePaymentThroughPaymentProcessor(userID); 

今すぐお支払いがあれば処理が進まない、またはエラーが発生したときに変更をロールバックして、データベースに追加されていない顧客が追加されないようにします。

私は

(var transaction = objMCOEntities.Database.BeginTransaction()) 
{ 
//code... 
context.SaveChanges(); 
return userID; 

私はhttps://msdn.microsoft.com/en-us/data/dn456843.aspx

の上に見えますが、私はaddCustomerリポジトリメソッドの後に呼び出されたトランザクションを参照するかどうかはわかりませんし、リポジトリメソッドをラップ使用して試してみました

私は最初に支払いをしてからdbに顧客を追加することができましたが、顧客をdbに追加するときにエラーが発生した場合、顧客は作成されずに支払いが行われ、その後お客様に返金する必要があります

+0

なぜ顧客を追加して支払いが失敗した場合は削除するだけではありませんか? –

+0

@ Dr.Stitch私はそれが一番簡単な方法かもしれないと思いますが、よりエレガントな方法があるかもしれません。 –

+0

私はこれがどんなことよりもあなたを助けるだろうと思うhttp://www.codeguru.com/csharp/.net/net_data/sortinganditerating/article.php/c10993/SystemTransactions-Implement-Your-Own-Resource-Manager.htm# page-2 – KhawajaAtteeq

答えて

1

Entity Framework 6を​​ご使用の場合は、thisページをご覧ください。基本的には、tranaction.Commit()とtransaction.Rollback()のどちらかを選択する必要があります。

しかし、このシナリオではこれは本当に必要ではないと思います。コードに正しい順序(第三者ツールを使用した最初の支払いとdbへの保存)がある場合、トランザクションは必要ありませんが、このサードパーティツールの詳細はわかりません。

+0

はい私はEF 6を使用していますが、ページを読んでいますが、addCustomerリポジトリメソッドが呼び出された後にトランザクションを参照する方法がわかりません。 –

+0

リポジトリメソッド内ではなく、トランザクション内でaddCustomerメソッドをラップできませんでしたか? – hbulens

関連する問題