問題タブ [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.
azure - Azure Table Storage で条件付き挿入を行うことは可能ですか?
Windows Azure テーブル ストレージ サービスで条件付き挿入を行うことはできますか?
基本的に、私がやりたいことは、最後に調べてからそのパーティションで何も変更されていない場合に限り、Table Storage Service のパーティションに新しい行/エンティティを挿入することです。
ご参考までに、私はイベント ソーシングを念頭に置いていますが、質問はそれよりも一般的なものだと思います。
基本的に、パーティションの一部または全体を読み取り、データの内容に基づいて決定を下したいと考えています。データがロードされてからパーティション内で何も変更されていないことを確認するために、挿入は通常のオプティミスティック コンカレンシーのように動作する必要があります。挿入は、パーティション内で何も変更されていない場合 (行が追加、更新、または削除されていない場合) にのみ成功する必要があります。
通常、REST サービスでは、ETag を使用して同時実行を制御することを期待しますが、私が知る限り、パーティション用の ETag はありません。
私が思いつく最善の解決策は、タイムスタンプ/ETag を含むテーブル内の各パーティションに対して単一の行/エンティティを維持し、すべての挿入を、挿入とこの ' の条件付き更新で構成されるバッチの一部にすることです。タイムスタンプエンティティ」. ただし、これは少し面倒で脆いように思えます。
これは Azure Table Storage Service で可能ですか?
entity-framework - EntityFrameworkで同時実行を処理する
EntityFrameworkを使用しながら同時実行を処理するための最良の方法を探しています。最も単純で最も推奨される(スタック上にもある)ソリューションについては、次のとおりです。http: //msdn.microsoft.com/en-us/library/bb399228.aspx 次のようになります。
しかし、それで十分ですか?Refresh()と2番目のSaveChanges()の間で何かが変更された場合はどうなりますか?キャッチされていないOptimisticConcurrencyExceptionがありますか?
編集2:
これが最終的な解決策になると思います。
Refresh()がどのように機能するかを理解しているかどうかはわかりません。コンテキスト全体を更新しますか?はいの場合、なぜ追加の引数(エンティティオブジェクト)が必要なのですか?または、指定されたオブジェクトのみを更新しますか?たとえば、この状況では、Refresh()の2番目の引数として何を渡す必要がありますか。
それはdbOrderである必要がありますか?
mysql - context.savechanges を呼び出すと、MVC3 を使用する MySql でエラーが発生する
MVC3 アプリケーションで Sql Server 2008 の代わりに MySql データベースを使用しようとしています。関連するデータベースとオブジェクトを Mysql に作成しました。そして、MySql.Data.MySqlClient を参照するように web.config ファイルの接続文字列を更新しました。
アプリケーションを実行してログインしようとすると、エラーが発生します
カスタムMembershipProviderがあり、検証プロセス内に次のものがあります
上記のコードは Sql Server 2008 で完全に機能しますが、MySql でのみ失敗します。どうすればこれを解決できますか?
基になるテーブルで定義されたトリガーはありません。アプリケーションは、EF Code First の MVC3 です。ありがとう、
asp.net-mvc-3 - オブジェクトの代わりに FormCollection を Post アクション メソッドに渡している場合でも、DbUpdateConcurrencyException を強制的に発生させるにはどうすればよいですか?
私は asp.net mvc Web アプリケーション内に次のアクション メソッドを持っています。これは、DbUpdateConcurrencyException
発生する可能性のある同時競合を処理するためのものです。
しかし、オーバーバインディング攻撃を避けるため[Bind(Include = "Date, Title")]
に、オブジェクトクラスで定義しましたが、モデルバインダーがオブジェクトをバインドできないため、同時競合が発生しなくても上記のアクションメソッドが例外を返すため、問題が発生しましたID とその他の値なので、アクション メソッドを次のように変更しました:-
ただし、2 番目のアプローチのようにアクション メソッドを記述してDbUpdateConcurrencyException
も、どのような状況でも は発生しません (同時実行の競合が発生した場合でも!!!)。
だから私の質問はDbUpdateConcurrencyException
、競合が発生した場合に が発生することを確認すると同時に、 を定義することによって過剰拘束攻撃が発生しないようにする方法[Bind(Include = "Date, Title")]
です。助けと提案を前もって感謝します。
ブラジル
asp.net - System.Web.Providers での OptimisticConcurrencyException
SQL Server のセッションに Microsoftの新しいUniversal Providersを使用しています。SQL Server でのセッションの古い実装では、期限切れのセッションをクリアするために (毎分実行される) ジョブが必要でした。新しいものは、このチェックを行い、リクエストごとにクリアします。私は実際に SQL Azure で実行しているので、ジョブをスケジュールするための SQL エージェントを持っていないので、これは合理的な方法のように思えます (いいえ、Azure Cache のセッションに料金を支払いたくありません)。
問題は、複数のユーザーが同時にサイトにアクセスすると、両方のユーザーが同時に期限切れの同じセッションをクリアしようとし、2 番目のユーザーが楽観的同時実行例外を取得することです。
エラー ログに ELMAH を使用していますが、これはある程度の頻度で表示されます。エラーを無視するように ELMAH を構成しようとする前に、そもそもエラーが発生しないようにする方法を知っている人はいますか? 不足している新しいプロバイダーの構成はありますか?
.net - モデルファーストアプローチでのタイムスタンプ属性を使用したEF同時実行処理
ASP.NETMVCアプリケーションでのEntityFrameworkとの同時実行の処理で指定されたソリューションを実装しようとしています。
記事によると:
部門エンティティへの追跡プロパティの追加
Models \ Department.csに、追跡プロパティを追加します。
Timestamp属性は、この列がデータベースに送信されるUpdateおよびDeleteコマンドのWhere句に含まれることを指定します。
モデルファーストアプローチを使用しているため、EntityFrameworkを使用したタイムスタンプ列の作成で概説されている手順1〜5に従いました。
- EFのモデルのエンティティに「Timestamp」という名前のプロパティを追加します
- タイプをバイナリに設定します
- nullableをfalseに設定
- StoreGeneratedPatternをComputedに設定します
- ConcurrencyModeをFixedに設定します
データベースモデルからコードを更新すると、Models\Department.csに次の内容が含まれるようになります
次に、メタデータクラスを使用してTimestamp属性を指定しました。
Q1。Timestamp
行を編集した場合に列の値が変化するかどうかをテストしました。そうではありません。
編集1この問題は、SQL Serverの列タイプがbinary
であったために発生しましたが、タイプはであるはずtimestamp
です。データ型を変更すると、タイムスタンプ列が更新されない問題が修正されました。
Q2。同じエンティティを([新しいタブで開く]を使用して)変更して、OptimisticConcurrencyException
がスローされるかどうかを確認しようとしました。そうではありません。私は何が間違っているのですか?理解するのを手伝ってください、ありがとう。
entity-framework-4 - ビューをテーブルに変換して変更を保存すると、楽観的同時実行性の例外が発生します
私はEntityFramework4(自己追跡エンティティを使用)を使用していて、2つのテーブルのマージであるビューにアクセスしています。したがって、ビューの情報を更新するときは、データベースにアクセスするリポジトリにビューのSTEを送信します。
私は次のことをしました:
更新された情報を含むビューを受け取ったら、STE1とSTE2を作成します。STEを作成すると、状態が追加されて作成されます。したがって、ビューのSTEの状態について、状態が変更されていることをどのように知るか、メソッドを使用して2つのSTEの状態を変更しMarkedAsModified
ます。
次に、ビューのSTEに2つのテーブルの情報がどのようにあるか、ビューからの情報を正しいSTEに渡し、STEからの変更をに適用しますobjectContext
。
最後に私はを作りますsaveChanges
。しかし、このステップで私はを受け取りますOptimistic concurrency exception
。これは、STEが状態からに渡さAdded
れるModified
ため、コンテキストが作成と作成の間に何らかの変更があることを検出するためだと思いますが、後で変更済みとしてマークされたSTEでSaveChanges
試行しAcceptChanges
、変更を適用して最後SaveChanges
に、問題は解決しません。
どうすれば問題を解決できますか?ビューとEntityFrameworkv4を操作するためのより良い方法はありますか?
ありがとう。ダイムロック。
編集1:私はまだ問題があります。私のコードは次のとおりです。
コンポーネントmyComponent=new Components(); //これはSTEですmyComponent.Rereference=myView.Reference; ... //その他のプロパティmyComponent.MarkedAsModified(); //これが必要なのは、新しいレジスタを追加するのではなく、情報を更新したいからです。myContext.ApplyChanges( "Components"、myComponent); miContexto.SaveChanges();
saveChangesで、例外が発生します。update、insert、またはdeleteステートメントが予期しない行数(0)に影響しました。エンティティがロードされてから、エンティティが変更または削除された可能性があります。ObjectStateManagerエントリを更新します。
どちらが問題ですか?作成した新しいSTEを変更できませんか?
ありがとう。
entity-framework - エンティティ フレームワークと楽観的同時実行例外に関するいくつかの一般的な疑問
オプティミスティック コンカレンシー例外について疑問があります。
たとえば、データベースからいくつかのデータを取得し、いくつかのレジスタを変更してから、変更を送信します。私の要求と私の更新の間に誰かがレジスタの情報を更新すると、楽観的な例外が発生します。古典的な並行性の問題。
私の最初の疑問は次のとおりです。EF は、情報が変更されているかどうかを判断し、データベースからデータを取得し、取得した元のデータとデータベースから取得したデータを比較します。違いがある場合は、オプティミスティック同時実行例外がスローされます。
オプティミスティック同時実行例外をキャッチした場合、クライアントが勝つかストアが勝つかを決定します。このステップで、EF は情報を再度取得するか、最初に取得したデータを使用しますか? 再度データを取得すると効率が悪いからです。
2 番目の疑問は、オプティミスティック同時実行例外を制御する方法です。コードの catch ブロックで、クライアントが勝つかストアが勝つかを決定します。クライアントが勝ったら、saveChanges を再度呼び出します。しかし、クライアントが勝ったと判断してから変更を保存するまでの間に、他のユーザーがデータを変更する可能性があるため、楽観的同時実行例外が再び発生します。理論的には、無限ループになる可能性があります。
クライアントがデータベース内の情報を確実に更新できるように、トランザクション (スコープ) を使用するのは良い考えでしょうか? 他の解決策は、ループを使用してデータを更新するために N 回試行することです。それが不可能な場合は、終了してユーザーに伝えます。
取引は良い考えでしょうか?データベースのリソースを大量に消費しますか? トランザクションはデータベースを一瞬ブロックしますが、更新操作が確実に終了するようにします。操作を完了しようとする N 回のループ、データベースを N 回呼び出すため、さらに多くのリソースが必要になる可能性があります。
ありがとう。ダイムロック。
編集:私は尋ねるのを忘れました。同時実行例外を待機する代わりに、デフォルトでクライアント wins を使用するようにコンテキストを設定することは可能ですか?
asp.net - SqlDataSource での削除時の空の辞書エラー - ASP.net ListView
楽観的な同時実行性を持つ単純な ListView を作成しようとしています。VS で自動生成された Delete、Insert、Update ステートメントを使用します (挿入する 1 つの変更を除く: コードを参照)。挿入と編集は正常に機能し、データベースにコミットします。削除しようとすると、次のエラーが発生します。
削除コマンドが SqlDataSource 'MySourceHere' のすべての値を比較するように指定しましたが、値に渡されたディクショナリが空です。有効なディクショナリを渡して削除するか、モードを OverwriteChanges に変更してください。
「CompareAllValues」を「OverwriteChanges」に変更して、同時実行作業を後で延期しようとしましたが、Update コマンドと Delete コマンドが「中断」され、ListView が古い値で更新されたように見えます。この問題を解決した唯一のスレッドは、「OverwriteChanges」に変更するか、「DataKeyNames」を宣言していない人でした。関連するマークアップを以下に示します (期待しています)。
何かご意見は?
hibernate - spring mvc (休止状態) での並行処理の処理
これを実装する適切な方法について疑問に思っているのは私だけだとは信じがたいですが、残念ながら私の検索では良い解決策が返されませんでした。
基本的に、Spring MVC と休止状態を使用して Web アプリを実装しています。これは jsp ページを指す MVC モデルであるため、リクエストを実行した後にオブジェクトを失い、更新を行う前に ID から再構築します。
並行性を念頭に置いてこれを再設計する最良の方法は何でしょうか? (現在、同時実行性は考慮されていません!!) はい、バージョンを JSP の非表示フィールドとして保存し、ポスト リクエストで送信できますが、それは「エレガントな」ソリューションではないようです。より良い方法はありますか?