問題タブ [transactionscope]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nhibernate - NHibernate、トランザクション、および TransactionScope
NHibernate を使用する Web アプリケーションでトランザクションを処理するための最適なソリューションを見つけようとしています。
IHttpModule を使用し、HttpApplication.BeginRequest で新しいセッションを開き、それを ManagedWebSessionContext.Bind(context, session); で HttpContext にバインドします。HttpApplication.EndRequest でセッションを閉じてバインドを解除します。
リポジトリ基本クラスでは、ベスト プラクティスに従って、SaveOrUpdate、Delete、Get メソッドの周りに常にトランザクションをラップしました。
しかし、保存、削除などの複数のリポジトリ呼び出しを含めるためにアプリケーションサービスなどのどこかにトランザクションを配置する必要がある場合、これは機能しません。
そこで私たちが試みたのは、TransactionScope を使用することです (独自のトランザクション マネージャーを作成したくありませんでした)。これが機能することをテストするために、.Complete() を呼び出さない外側の TransactionScope を使用してロールバックを強制します。
リポジトリ保存():
リポジトリを使用するブロック:
これはうまくいきません。しかし、NHibernate が TransactionScope をサポートしていれば、私にはそうなるでしょう! 何が起こるかというと、データベースにはまったく ROLLBACK がありませんが、testRepository.GetById(testEntity.Id); ステートメントが実行されると、SET Text = "TestCahgned" を指定した UPDATE が代わりに実行されます (BEGIN TRAN と ROLLBACK TRAN の間で実行されるはずです)。NHibernate は level1 キャッシュから値を読み取り、UPDATE をデータベースに送信します。予期しない動作!? 私が理解していることから、NHibernate のスコープでロールバックが行われるたびに、現在のセッションを閉じてバインドを解除する必要もあります。
私の質問は: TransactionScope と ManagedWebSessionContext を使用してこれを行う良い方法を知っている人はいますか?
wcf - TransactionScope内でnetMsmqBindingを使用してWCFを呼び出してトランザクションを停止する
MSMQ で動作する WCF ログ サービスがあります。アイテムは Sql Server 2005 データベースに記録されます。TransactionScope の外部で使用すると、すべてが正しく機能します。TransactionScope インスタンス内で使用すると、呼び出しによって常にトランザクションが中止されます。Message = "トランザクションは中止されました".
この呼び出しをトランザクション内で機能させるにはどうすればよいですか? それは可能ですか?クライアント トランザクションがサービスの境界を越えて流れるには、バインディングがトランザクション フローをサポートする必要があることを読みました。これにより、バインディングがただちに NetNamedPipeBinding、NetTcpBinding、WSHttpBinding、WSDualHttpBinding、および WSFederationHttpBinding のみに制限されます。
linq-to-sql - SQL Server Compact (CE) は、別のトランザクション スコープ内の RequiresNew トランザクション スコープをサポートしていますか?
これは、SQL Server CE 3.5 SP1 を使用した非常に単純な例で、既存のトランザクション内で新しいトランザクションを使用しようとしています。
これにより、「接続オブジェクトをトランザクション スコープに登録できません」というエラーが発生します。「db.SubmitChanges()」への 2 回目の呼び出しで
この記事では、SQL CE は 1 つのトランザクション内で 2 つの接続をサポートしていないと述べていますが、ここでは 1 つしかありません (SubmitChanges() が別の接続を作成しない限り)。
上記の考え方は、サブトランザクションがコミットされた場合、外部トランザクションが失敗してもコミットされたままになるというものです。私の理解では、これがRequiresNew の使用目的です。
This MSDN articleは、SQL CEがネストされたトランザクションをそのままサポートしていると主張しているため、上記が可能であると考えています。それは...ですか?もしそうなら、これを機能させるにはどうすればコードを変更できますか?
編集:このMSDNの記事は他のMSDNの記事と矛盾しており、ネストされたトランザクションはサポートされていないと述べています。おそらくそれが問題ですか?
transactionscope - TransactionScope Connection が登録されているかどうかを確認する方法
パラメータの1つとして接続を持つメソッドがあります:
例 public void Foo(SqlConnection pConn) { }
Foo内で、pConnがトランザクションスコープに登録されているかどうかを判断できますか?
nhibernate - NHibernate トランザクション: これによりデータがコミットされるのはなぜですか?
次のコードは、コミットがトランザクションで呼び出されないにもかかわらず、データがデータベースにコミットされるという誤解を招く状況を示しています。
誰でも理由を説明できますか?
linq - 同じトランザクション内のLinqからsqlへの複数のデータコンテキスト
私は、異なるテーブルからデータを取得するための複数のリポジトリがあるプロジェクトに取り組んでいます。私のリポジトリはすべて独立しており、新しいdataContextを作成し、テーブルに行を追加し、変更の送信コマンドを適用します。私のサービスでは、複数のテーブルにデータを挿入する必要がある状況がありますが、それは 1 つのトランザクションで発生するはずです。私は TrnasctionScope のものを使用してそれを達成できますが、それには同じ dataContext が必要です。StrucutreMap を使用してオブジェクトを作成しているため、同じデータ コンテキストを取得できないため、トランザクションが失敗します。
これが私のオブジェクトの様子です。
今私のサービス層で私はそれらを
同じデータ コンテキストを 2 つの異なるリポジトリに渡すにはどうすればよいですか。オプションとして、以下に示すように IDataContext パラメータを受け入れる各リポジトリにオーバーロードされたメソッドを 1 つ作成していると思いました。
私のサービスレイヤーでは、次のように実装します
2番目に考えたのは、GetContextメソッドを呼び出したときに同じ接続を返すようにDataContextを構成できる場合です。そのため、すべてのリポジトリが同じ接続を使用します。しかし、私はそれが常に接続を維持すると感じています. この SaveAll メソッドの実行中のみ、この接続を使用できるようにします。
あなたの助けは感謝されます。前もって感謝します。
乾杯パーミンダー
entity-framework - EntityFrameworkでselectを使用してテーブルをロックする
私はこのようなことをする必要があります
EntityFrameworkを使用します。これは可能ですか?TransactionScope
分離レベルでを開きましたSerializable
が、selectがテーブルをロックしていません。トランザクションスコープが完了するまでロックしてほしい。
.net - LinqToSQLを使用した複数のSubmitChangesとトランザクションのロールバック
TransactionScopeを使用してLinqのデータをSQLに送信しています。私の質問は、同じスコープで複数のSubmitChangesを使用する場合、エラーが発生した場合、または最後のSubmitChangesの後に行われた変更のみが発生した場合に、すべてのスコープがロールバックするのでしょうか。例えば:
更新SubmitChangesが例外をスローした場合、挿入SubmitChangesもロールバックしますか?
c# - TransactionScopeを使用したトランザクション処理
このMSDNの記事http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspxを使用して、TransactionScopeを使用してトランザクションを実装しています 。
TableadaptersでTransactionScopeを使用するときに問題があることを確認したいだけです。
私はこの記事を読み、これに関するいくつかの問題を読みましたが、記事は2.5年前のものでした http://blog.falafel.com/2007/04/09/GettingTableAdaptersToParticipateInTransactions.aspx
最新バージョンの.NetFrameworkで、問題が解決されたことを願っています
.NetFramework3.5バージョンを使用しています
ありがとう
c# - リポジトリ設計の問題
進行中のWebプロジェクトにいくつかの設計エラーがあると思います(リポジトリパターンを実装するLinq2SQLを使用しています)1)すべてのリポジトリは独自のDataContextを作成します(これは正しいですか?これはこのようにする必要があります)例:
そして別の例:
ご覧のとおり、私は IoC を使用しています (Windsor、lifestyle="PerWebRequest" を使用)。
2) すべてのリポジトリにサービス レイヤーを使用する。人の例
これはサービス層を定義する正しい方法ですか? または、すべてのリポジトリを参照する 1 つのサービス クラスを使用する必要がありますか?
3) personTable と trainingCenterTable の間には関係があります。TrainingCenter-Service に何かを挿入するたびに、Person-Service にも 1 つのレコードを挿入する必要があります。したがって、これに対する解決策は次のように言うことです:
もちろん、これら 2 つの挿入をトランザクション方式で実行したいので、このステートメントを次のようにラップすることにしました。
したがって、新しい問題が発生します。サーバー '.\SQLEXPRESS' の MSDTC は使用できません (異なる DataContext があるためですよね??)。これをどう乗り越えるか!?
解決策は、DataContext を外部で作成し、それをパラメータとしてリポジトリに渡すことです!?? 正しい考え方?しかし、どのように実装するのですか?
4) 既存の設計では、TrainingCenterBusinessLayer.Save(); を呼び出す必要があります。PersonBusinessLayer.Save(); これは間違っていると思います!save() 操作は、DataContext で 1 回呼び出す必要があります。しかし、どのように?(上記の点が解決されれば、これは解決できるようです)。