2009-04-02 15 views
2

SQL Server 2005 expressをバックエンドとして使用して、C#時に複数のユーザーアプリケーションを作成しました。C#データベースアプリケーションの同時実行性

私はOrdersコレクションを持っています。このクラスを使用するには、それをインスタンス化し、指定された顧客の注文を収集に入れるためにLoad(CustomerCode)メソッドを呼び出す必要があります。

私の質問:

のみ1ユーザーが特定の顧客の注文のコレクションを要求できるように、どのようにして、同時実行を強制するのですか?ユーザーがオブジェクトを終了すると(オブジェクトがnullに設定されている場合)、 私は再び利用可能にする必要があります。

答えて

6

Pessimistic Offline Lockのパターンを実装する必要があります。

基本的に、他のテーブルのレコードに「ロック」を表すレコードを配置するテーブルがあります。レコードを編集する場合は、最初にロックテーブルにロックがあるかどうかを確認し、ドメインロジック/ UIでそれに応じて反応します。

データベースである必要はなく、メモリ内キャッシュでもかまいません。私の例で「テーブル」と言うと、論理テーブルであり、必ずしもデータベースではありません。

悲観的なオフラインロックは、完全に回避することによって の競合を防ぎます。それはように、それを使用するために開始する前に それはあなたが ビジネストランザクションを開始すると、あなたが完了します かなり確認することができ、時間の はほとんど、データ の部分のロックを取得 にビジネス・トランザクションを強制的に同時実行制御では がバウンスされていません。

+0

いいですが、これが実装されているコードへのリンクがありますか? – MegaByte

+0

残念ながら、コードサンプルへのリンクはありませんが、私のリンクからFowlerの本を読んだ場合、コードサンプルがいっぱいです。インターネット上でダウンロードすることもできます - エンタープライズアプリケーションアーキテクチャのパターン。 –