車に関する情報を保持するテーブルがあります (tbl_incoming_car と呼びましょう)。そのテーブルには、'customer_number' という名前の一意ではない列があり、これまでにシステムに入った車の数を示しています。同じ車は何回も出入りできますが、これは一度しか登録されません。
そのため、新しい車が入ってきたら、最後の車の番号を取得してインクリメントし、それを新しい車の「customer_number」として保存する必要があります。
最も簡単な方法は、車用に別のテーブルを用意し、そこに「customer_number」を用意し、インとアウトを別のテーブルに登録することですが、これは状況を明らかにするためのばかげた例にすぎません。したがって、アプローチが間違っていることを議論する意味はありません。私はすでにそれを知っています:)
前述したように、新しい車がシステムに入るたびに、最後に追加された行を取得し、'customer_number' を取得してインクリメントし、アトミック操作として保存する必要があります。他のアプリケーション インスタンスが同じことを試みる可能性があり、DB は「作成タスク」中に最後に追加された行の要求を保持する必要があります。
分離レベルをシリアライズ可能に設定することでできると思いましたが、最後の行の読み取りは妨げられず、新しい行の挿入は妨げられないと思います。したがって、ロックが解決策のようです。コードで静的オブジェクトを Monitor として使用しようとしましたが、正常に動作しますが、もちろん同じアプリケーション ドメインに限定されており、DB レベルで何かが必要です。
DBにロックを設定するEFには何もないと思うので、テーブルにロックを設定して後で解放する最良の方法はどれですか?
ありがとう。