0

私はC#を初めて使用し、次の問題があります。

パラメータを.aspx受け入れるページがありますeventId

このページが特定のページで初めてリクエストされたときeventId、そのイベントに固有の行をデータベースに挿入する必要があります。

それでページが要求される他のすべてのeventId場合、行は挿入されるべきではありません。

データベースにクエリを実行して、そのイベントの行がすでに存在するかどうかを確認できますが、同時実行の問題を防ぐことはできません。

たとえば、2人のクライアントがeventId = 7まったく同時にそのページを要求しました。そのイベントの行が2回挿入される可能性があります。

それを回避するために、Mutex / Lock / Monitorなどを使用するにはどうすればよいですか?

文字列で識別されるロックメカニズムが必要です-イベントID

前もって感謝します...

4

2 に答える 2

1

データベースで、イベントIDに基づいて一意のインデックスを作成します。aspページで、挿入が失敗した場合は常に挿入して処理します。挿入が失敗した場合、イベントIDはすでに他の誰かによって使用されています。この設計では、dbが同期を行います。

于 2012-12-06T15:50:24.900 に答える
0

「イベントIDがすでに存在するかどうかを読み取る」および「そのイベントIDを挿入する」メソッドは、トランザクションで実行する必要があります。TransactionScopeを使用する場合は、分離レベルをSerializableに設定できます。これにより、データベースレベルで同時にアクセスできないようになり、イベントが2回挿入されるのを防ぐことができます。

ただし、opiが提案するように、データベースのそのフィールドに一意のキーインデックスも追加します。

于 2012-12-06T16:04:05.570 に答える