問題タブ [optimistic-concurrency]
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.
entity-framework - Entity Frameworkの楽観的同時実行(データベースが優先)パターンを理解する
リロードを使用した楽観的同時実行例外の解決(データベースが優先)を参照してください。
なぜメソッドSaveChanges()
が後に呼び出されるのReload()
ですか?この呼び出しによって、データベース内のデータが変更されることはありません。
optimistic-concurrency - Multiversion タイムスタンプ ベースの同時実行制御
タイムスタンプ ベースの同時実行制御では、トランザクション T_i で要素 x_k の書き込みを拒否する必要があるのはなぜですか?
ドキュメントに記載されているとおりです。
T_j がまったく更新を行う予定がない場合、T_i のアクションをそれほど制限する必要があるのはなぜですか?
optimistic-concurrency - Lightswitch 2011 同時実行制御
2つ質問があります。
- Lightswitch 2011は悲観的同時実行制御もサポートしていますか? もしそうなら、どのように?
- 楽観的制御は、外部データ ソースからのテーブルの ROWVERSION 列をサポートしていますか、それとも行の状態のみを使用しますか (元の値を使用)?
返信ありがとうございます。
c# - 予期しないオプティミスティック同時実行例外
オブジェクトのフィールドを更新して、すぐにデータベースに保存しようとしました。
2 つ以上のインスタンスを持つ Azure エミュレーターでこれを実行すると、ここで多くの OptimisticConcurrencyExceptions が発生します。
オブジェクトを更新し、そのフィールドの 1 つを更新してから、それらの変更をデータベースにプッシュしようとしています。ただし、楽観的同時実行が妨げられています。
注: オプティミスティック コンカレンシーは、私が触れたことのない TimeStamp フィールドに設定されています。
それはなぜですか、どうすれば修正できますか?
c# - Web アプリケーション シナリオでの NHibernate オプティミスティック コンカレンシーの問題
バージョン フィールドを使用して、ASP.NET MVC 4 アプリケーションで同時実行を制御しています。
マッピング:
実在物:
私は次のアプローチを使用しています。
- Id でエンティティを読み取り、UserDto エンティティにマップします (Dto はデータ転送オブジェクト パターン用です)。Version フィールドも含まれます
- UserDto エンティティを編集するためのフォームを表示する
- POSTed UserDto エンティティを受け取る
次に、次のことを行います。
問題は、userDto.Version が originalEntity.Version と一致しない場合でも、NHibernate は私の userDto.Version を無視し、originalEntity.Version を使用することです (明らかに、エンティティが読み取られたばかりなので、最初のレベルのキャッシュから)。このような動作により、私の Version フィールドは完全に役に立たなくなります。
NHibernate に、キャッシュされたバージョンではなく、提供されたバージョンの値を使用させるにはどうすればよいですか?
また、私のリポジトリを使用している他のプログラマーに対してバージョン管理をより透過的にすることは素晴らしいことですが、現在、受信したエンティティからバージョンを自動的に取得し、NHibernate にプログラマーなしでそれを使用させる方法がわかりません。気づいても。
何か案は?
stored-procedures - Update ストアド プロシージャを使用した Entity Framework オプティミスティック コンカレンシー (Julie Lerman の例)
Update ストア プロシージャを使用して同時実行の問題を理解するのに苦労しています。私は Julie Lerman の Programming Entity Framework に従っており、彼女は例として次のコードを示しています。
更新 SP は次のようになります。
そして、マッピングで「元の値を使用する」チェックボックスがオンになってい ます。
今、私がしようとすると:
そのままコードを実行すると、デバッガで調べた newRowVersion は origRowversion と同じなのですが、アプリは「else」句に入ります (そもそもなぜ同じなのか、変更しただけなのでしょうか? デバッガの問題でしょうか?)
コードを実行しますが、BREAKPOINT #1 で Management Studio の支払いオブジェクトを更新すると、SaveChanges が OptimisticConcurrencyException をスローします。これは期待通りの結果だと思います。
SQL プロファイラーを見るたびに、元のバージョンのタイムスタンプがサーバーに送信されます。
次に、タイムスタンプ値の SP マッピングで [元の値を使用] のチェックを外すと、すべてが上記と同じように機能します... わかりません。私はそれを間違ってテストしていますか?アプリはいつ「if」節に入る必要がありますか?
よろしくお願いします。
編集: Update SP マッピングの戻り値として newTimeStamp を追加しました。RowVersion の更新された値が DB から正しく取得されていることがわかります。しかし、「元の値を使用する」をオンにした場合とオフにした場合の違いはまだわかりません...
asp.net-mvc - RowVersion が変更されたときに Entity Framework が更新を実行するのはなぜですか?
Entity Framework 5 を使用して DbUpdateConcurrencyException をキャッチしようとすると問題が発生します。行がデータベースから取得されてから RowVersion (Timestamp) プロパティが変更されたにもかかわらず、EF がレコードを更新しているという問題があります。HttpGet Edit アクションはデータベースからユーザー プロファイルを取得し、ユーザーがロールを選択してビューに渡すためのチェックボックスのリストを含む値を ViewModel に渡します。
次に、RowVersion プロパティの HiddenFor を持つ基本的な編集ビューを作成します。
次に、viewModel からデータを取得し、データベースから取得したユーザー プロファイルに追加する HttpPost Edit アクションを作成します。次に、このプロファイルのプロパティを、RowVersion を含むクライアントから取得したものに変更します (RowVersion を元の状態に戻します)。
編集ページを 2 回開いてこれをテストします。次に、2 番目のページを更新して [保存] をクリックします。これにより、変更がデータベースにコミットされます。データベースは、更新を反映するために行バージョンが実際に変更されたことを示しています。2 番目のページを変更して [保存] をクリックすると、このプロファイルの行バージョンが最初のプロファイルを保存したときに作成された行バージョンと異なっていても、変更はデータベースにも保存されます。実際、データベースの行バージョンが実際に 2 回変更されていることを確認しました。
ここで明らかなことを見逃しているというおかしな気持ちがありますが、どんな助けでも大歓迎です。