問題タブ [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.
inheritance - Entity Framework 4: 継承とオプティミスティック コンカレンシー
AdventureWorks 2008 R2 データベースを使用しており、BusinessEntity テーブルと Person テーブルを EDMX に追加しました。次に、Person テーブルが BusinessEntity テーブルを継承するモデルに変更しました。ご存知かもしれませんが、これら 2 つのテーブルには ModifiedDate 列と rowguid 列があり、Person クラスは BusinessEntity クラスからこれらのプロパティを継承するため、これらのプロパティを持たないようにする必要があります。
私の質問は、モデルを変更して、ModifiedDate プロパティ/列の Person クラスと BusinessEntity クラス/テーブルの両方で継承と楽観的同時実行をサポートするにはどうすればよいかということです。
PS。また、ここで尋ねたエラー メッセージも表示されます。
ありがとう
django - django管理変更ビューの同時実行
私のモデル:
多くのユーザーが管理者変更ページを介して短時間で特定のレコードにアクセスするため、同時実行の問題が発生しています。
ユーザー 1 と 2 が同時に変更ページを開きます。ページをロードするときにすべての値が空白であると想定します。ユーザー 1 は、property_a を「a」に、property_b を「b」に設定して保存します。1 秒後にユーザー 2 がプロパティ b を変更して c を保存すると、ユーザー 1 のすべての値が静かに上書きされます。この場合、property_a は空白に戻り、b と c はユーザー 2 が入力したものになります。
これを処理する方法についての推奨事項が必要です。モデルにバージョン フィールドが必要な場合、それを管理者に渡すにはどうすればよいですか? 別のユーザーがレコードを変更したために変更を保存できないことをユーザーにエレガントに通知できるようにするには、どこでチェックを行えばよいでしょうか? ユーザーにエラーを返すよりシームレスな方法はありますか?
entity-framework - null許容外部キーはEntityFramework4で許可されていますか?
EntityFrameworkエンティティの外部キーの更新に問題があります。私は自己追跡エンティティを使用しており、外部キーがプロパティとしても存在するいくつかの関係を持つエンティティを持っています(EF4の新機能の1つ)。キー(整数)は、NullableおよびConcurrencyModefixedとしてマークされています。
具体的には、確認ユーザーとの関係が多対0..1のAlarmエンティティがあります。(ユーザーは複数のアラームを確認できますが、アラームを確認できるのは0人または1人のユーザーのみです)。
エンティティ定義(簡略化):
私の自己追跡エンティティでは、確認するユーザーIDは期待どおりにNullableとして自動生成されますが、ユーザーをすでに永続的なアラームに割り当ててApplyChangesを実行すると、自己追跡コンテキスト拡張機能は元の値(null)を設定しようとしますEFコンテキスト(コンテキスト拡張のSetValue内)ですが、EdmTypeのClrEquivalentTypeはnull許容ではないInt32であるため、サイレントにスキップします。
自動生成された拡張コード:
EFが後でアラームを更新しようとすると、UPDATEステートメントにWHERE句が作成され、正しい「is null」ではなく、元のユーザー外部キー値として0(ゼロ)が使用されるため、OptimisticConcurrencyExceptionが発生します。(WHERE句はEF楽観的同時実行メカニズムの一部であり、「固定」同時実行モードでマークされたプロパティの元の値がデータベース内のプロパティに対してチェックされます)。
null許容外部キー/プリミティブ型はEFの自己追跡エンティティで完全にはサポートされていませんか?そうでない場合、nullの代わりにダミーエンティティを使用することを強制されますか、それとも他の回避策がありますか?
更新 STEなしで問題を再現しようとしましたが、プレーンEFはnull許容外部キーに対して楽観的同時実行性をうまく処理しているようです。したがって、これはSTEの問題であり、EFの問題ではありません。自己追跡エンティティには多くの問題があるため、ここに不具合があるのは当然のことです。STE T4スクリプトで実装できる回避策を見つけたら、ここに投稿します。
user-interface - オプティミスティック コンカレンシーの失敗に関するエンド ユーザーへの適切なメッセージは何ですか
オプティミスティック コンカレンシー例外をユーザーに説明するための適切な言葉を考え出そうとしています。思っていたよりずっと難しいことがわかりました。私がこれまでに持っている最高のものは次のとおりです。
他の誰かが、あなたが作業していたレコードを既に変更しています。それらの新しい値を以下に示します。行った変更をやり直してください。
これは私にはちょっとくだらないと感じます。彼らはもっと良いものでなければなりません。何かご意見は?
linq-to-sql - INSERT トリガーによって変更された列を Linq-to-SQL で無視するにはどうすればよいですか?
データベース内のさまざまな INSERT/DELETE トリガーによって更新されているテーブルの 1 つに列があります。トリガーは、リンクされたテーブルの内容に基づいて計算を実行し、結果をベース テーブルの列に格納してクエリを容易にします。
これらのテーブルを更新しようとすると、Linq-to-SQL が ChangeConflictException をスローします。おそらく、トリガーがこの列を変更しているため、L2S はデータの競合があると考えています。
私が探している正確な動作は次のとおりです。
- L2S は、オブジェクトを取得するときにこの列の値を取得する必要があります
- L2S はこの列値への変更を無視する必要があります - コードで行われた変更は DB に永続化されるべきではありません
- 保存時の競合は無視する必要があります。
- (可能であれば)挿入/更新操作に続いてDBから最新の値を取得する必要がありますが、難しい場合はこれがなくても生きられます。
Linq-to-SQL でこの動作を実装するのを手伝ってくれる人はいますか?
ありがとう、
ディラン
c# - c#.NET N層アプリケーションで楽観的同時実行性の更新を解決するにはどうすればよいですか?
みなさん、こんにちは。
c#.net VS 2008では、N層CRMフレームワークソリューションを開発しており、それが完了したら、それを共有したいと思います。
アーキテクチャは以下に基づいています。
データアクセス層、エンティティフレームワーク、Bussinesロジック層、WCF、そして最後にプレゼンテーション層(Winフォーム)。
どこかで読んだところによると、オプティミスティック同時実行更新(同じデータを使用する複数のクライアントトランザクション)が原因で、2層を超えるレイヤーには問題があります。
最大で 2層レイヤーソリューションこれは、この問題を自分で解決するコントロール(datagridviewなど)があるため、問題にはならないはずです。したがって、2層レイヤーで作業する方がよいのではないかと自問し、楽観的同時実行性を回避します。問題?
実際、私は2層ではなく、巨大なプロジェクト向けのN層層ソリューションを作りたいと思っています。このような並行性の問題を解決する方法がわからないので、ここで助けを求めています。
確かに、これを解決するためのいくつかの良いメカニズムがあるはずです...多分何か提案、例など?
期待していただきありがとうございます。
よろしく、Jooj
optimistic-concurrency - myAtomicReference.compareAndSet(expected,new Date()) を実行する 2 つのスレッド
Q: 2 つのスレッドがそれを実行する場合、どのオブジェクトがアトミック参照に格納されますか?
マルチプロセッサ マシンでは、2 つのスレッドが同じクロック サイクルで CAS を実行できます。どちらも同じ myAtomicReference オブジェクトを使用して CAS を実行し、どちらも正しい値の "expected" を使用していますが、2 つの異なるオブジェクト、つまり 2 つの newDate を入れようとしているとします。そのうちの 1 つが失敗する必要がありますが、そのスレッドで myStatus は false になりますか?
CompareAndSwap の 1 つのハードウェア実装では、更新を行うためにスレッドをキューに入れると思います。2 つのプロセッサが同じクロック サイクルで CAS 命令を実行している場合でも、そのうちの 1 つが遅れている可能性があります。
asp.net - 削除する前に行が存在するかどうかを確認する必要がありますか?
Mssql をデータベースとして、EF4 を ORM/DAL として使用しています。
私の質問は、次のコードに関するものです。
行が存在する場合、これは非常にうまく機能します。そうでない場合は、例外が発生します( Store update、insert、または delete ステートメントが予期しない数の行 (0) に影響しました。エンティティが読み込まれてから、エンティティが変更または削除された可能性があります。ObjectStateManager エントリを更新します。)
次のように行が存在するかどうかを確認するために、データベースへの往復を行う必要があります。
EF がなくても、単純な SQL を使用すると、単一の DELETE コマンドで行を簡単に削除できるため、余分なラウンドトリップは不要だと思います。
より良い習慣は何ですか?
c# - EntityFrameworkを使用した楽観的同時実行性更新の問題の解決
あるユーザーが別のユーザーによってすでに更新されたEnteryを更新する場合、シミュレーションの更新をどのように解決すればよいですか?
最初のユーザーが「Category」entityobjectをリクエストし、2番目のユーザーが同じことを行います。
2番目のユーザーがこのオブジェクトを更新し、最初のユーザーが更新します。
データベースに同時実行モードに設定されたフィールドタイムスタンプフィールドがあります-修正されました。
これが私が更新する方法です:
例外がジャンプすることはありません...
これをどのように処理する必要がありますか?
database - Linq to Sql - リポジトリ パターンを使用してオブジェクトを更新する方法は?
これにはたくさんの情報がありますが、何時間も読んだ後でも、思い通りに動作させることができないようです。
User オブジェクトを渡し、データベースから取り出した User オブジェクトへの変更を一般的に比較することで、User オブジェクトを更新しようとしています。このメソッドを使用すると、常に NotSupportedException が発生します。
別の DataContext から読み込まれた可能性がある、新しくないエンティティをアタッチまたは追加しようとしました。これはサポートされていません。
これが私がそれをやろうとしている方法です:
私が試したコメントアウトされた行もコメント解除しましたが、それは助けにはなりませんでした。
foreach() ループをコメントアウトして、dbUser.UserName = "Cheese"; のような行を追加するとします。データベース内のユーザー名を正常に更新します。これは、 foreach() ループが dbUser オブジェクトを変更してこれが失敗する原因であると私は信じています。
dbUser オブジェクトをデバッグすると、引数として渡された User オブジェクトからすべての変更が正しく取得されているように見えます。
オプティミスティック コンカレンシーについても調べて、タイムスタンプ データ型のテーブルに列を追加しましたが、効果もないようです。
ここで私は正確に何を間違っていますか?
何が変更されたかを一般的に検出し、データベースへの変更を正しく永続化するにはどうすればよいですか?