datacontextでトランザクションを使用できますが、エラーの後でコンテキストの状態をロールバックできますか?もしそうなら、それはどのように機能しますか?datacontextでトランザクションを使用する方法
答えて
私は、これは常に事実の後にロールバックされます、すべての時間に:)
try
{
dc.Connection.Open();
dc.Transaction = dc.Connection.BeginTransaction();
dc.SubmitChanges();
}
finally
{
dc.Transaction.Rollback();
}
UPDATE
をテストする際にそれらを使用しています。私はこれをテストに使用します。おそらく、このような
何か、:
try
{
using (TransactionScope scope = new TransactionScope())
{
//Do some stuff
//Submit changes, use ConflictMode to specify what to do
context.SubmitChanges(ConflictMode.ContinueOnConflict);
scope.Complete();
}
}
catch (ChangeConflictException cce)
{
//Exception, as the scope was not completed it will rollback
}
AのDataContextは、デフォルトでは、周囲のトランザクションをピックアップしますので、スコープのトランザクションがある確保するだけです。あなたは新しいトランザクションをしたいか、既存のトランザクション(例えば、監査/ログ操作はとても新しいトランザクションが必要になることがあります再利用してください
- あなたは
- (例えば分離レベルを)どのようなオプション必要です:詳細は、主な問題となって全体のビジネス操作が失敗して外部トランザクションがロールバックされた場合でもコミットできます)。
これはプロトタイプコードを単純化したもので、実際のコードではヘルパーを使用してポリシー駆動オプションを使用してトランザクションを作成しています(プロトタイプの目的の1つはこれらのオプションの影響を調べることでした)。
using (var trans = new TransactionScope(
TransactionScopeOption.Required,
new TransactionOptions {
IsolationLevel = IsolationLevel.ReadCommitted
},
EnterpriseServicesInteropOption.Automatic)) {
// Perform operations using your DC, including submitting changes
if (allOK) {
trans.Complete();
}
}
Complete()が呼び出されないと、トランザクションはロールバックされます。トランザクションスコープが含まれている場合は、内部トランザクションと外部トランザクションの両方をコミットするデータベース上の変更に対して完了する必要があります。
SQL ServerのIsolationLevel変更を含める場合は+1します。ここで説明します:http://blogs.msdn.com/b/dbrowne/archive/2010/05/21/using-new-transactionscope-considered-harmful.aspx なぜEnterpriseServicesInteropOption.Automatic? –
どこから来たのですか?私のインテリタイプはそれを拾っていません。 – Kukoy
@Fritos:トランザクション内で実行されているコード(つまり、コメントの置換え)。 – Richard
これはTransactionScopeメソッドほど単純ではありませんが、理解しているように、これはLINQ-to-SQLに対して「正しい」方法です。 System.Transactionsへの参照は必要ありません。もちろん
dataContext.Connection.Open();
using (dataContext.Transaction = dataContext.Connection.BeginTransaction())
{
dataContext.SubmitChanges();
if (allOK)
{
dataContext.Transaction.Commit();
}
else
{
dataContext.Transaction.RollBack();
}
}
あなたが使用して内部にさらにデータ操作をするつもりならば、ロールバックは唯一それ以外の変更は自動的に破棄され、必要になります。
どこから来たのですか?私のインテリタイプはそれを拾っていません。 – Kukoy
@Fritos:これは擬似コード – abatishchev
これは受け入れられた答えよりも簡単です。なぜそれが受け入れられた答えではないのか? – ChrisFox
はこのようなものです:
using (YourDatacontext m_DB = new YourDatacontext()) using (TransactionScope tran = new TransactionScope()) { try { //make here the changes m_DB.SubmitChanges(); tran.Complete(); } catch (Exception ex) { Transaction.Current.Rollback(); } }
- 1. トランザクションでoracledataadapterを使用する方法?
- 2. トランザクションDatastoreIOの使用方法
- 3. Codeigniterトランザクションの使用方法
- 4. Redisでロールバックを使用してトランザクションを実装する方法
- 5. リモートOrientDBでトランザクションを使用する方法
- 6. SMO.ServerのConnectionContextでトランザクションを使用する方法
- 7. jdbcクライアントでphoenixトランザクションを使用する方法
- 8. 蒸気でPostgreSQLトランザクションを使用する方法
- 9. トランザクションを使用するストアドプロシージャを作成する方法は?
- 10. DataContextフリーズを最適化する方法
- 11. DataContextを継承する方法
- 12. DataContextを移動する方法
- 13. Datacontextを使用したInvalidOperationException
- 14. DataContextを使用したデータバインディング
- 15. paypal checkout.jsを使用してトランザクションIDを取得する方法
- 16. oracleデータベースのトランザクションをJavaバックエンドから使用する方法は?
- 17. トランザクションにUser列を使用する方法は?
- 18. セーブポイント/ネストされたトランザクションにHibernate Session.doWork(...)を使用する方法?
- 19. MySQLiトランザクションを使用してロールバックしコミットする方法は?
- 20. Web.ConfigプロファイルプロパティでDataContext型を使用
- 21. Neo4jでJSON APIを使用してトランザクションを行う方法は?
- 22. カスタムコントロール内のDataContextの使用
- 23. スプリング、トランザクション、単体テスト - クラスレベルでトランザクションを設定する方法
- 24. EJBでトランザクションをコミットする方法は?
- 25. ssisでトランザクションをロールバックする方法は?
- 26. ビジネスロジックレイヤーでトランザクションを管理する方法
- 27. Laravelでトランザクションを処理する方法
- 28. Snowflakeでトランザクションを使用するには?
- 29. CakePHPでトランザクションを使用する
- 30. Slick 3でトランザクションを使用する
あなたはあなたのサンプル_always_はその作業に戻りますことを言及すべきである、または私は間違っているとdc.Transaction.Rollback(午前)(dc.SubmitChanges後に問題はありません)? – VVS
-1:トランザクションを使用するブロックを使用する必要があります。 – Richard
@リチャード:意味的に私のものと同じ '使用する'ブロックを使ってスニペットを待っています。 – leppie