16

私は、お金の取引をしている状況で働いています。

たとえば、ユーザーのウォレットのテーブルがあり、その行に残高があります。

UserId; Wallet Id; Balance

現在、私たちの Web サイトと Web サービスでは、特定のトランザクションが発生するたびに、次のことを行う必要があります。

  1. そのトランザクションを実行するのに十分な資金があることを確認します。
  2. 残高からトランザクションのコストを差し引きます。

トランザクションの全期間にわたってその行/エンティティをロックする正しい方法と方法は何ですか?

私が読んだことから、EFがエンティティをマークし、それをDBに保存するときにそのマークを比較するソリューションがいくつかありますが、別のユーザー/プログラムがすでに金額を編集した場合はどうなりますか?

EFでこれを達成できますか? そうでない場合、他にどのようなオプションがありますか?

ストアド プロシージャを呼び出すと、プログラム A がロックしている間、他の誰も SQL Server のその行にアクセスできないように、行を適切にロックできますか?

4

3 に答える 3

5

エンティティ フレームワークのトランザクションに isolationlevel を設定して、他の誰も変更できないようにすることができます。

YourDataContext.Database.BeginTransaction(IsolationLevel.RepeatableRead)

RepeatableRead 概要: クエリで使用されるすべてのデータにロックがかけられ、他のユーザーがデータを更新できないようにします。繰り返し不可能な読み取りを防ぎますが、ファントム行は引き続き可能です。

于 2014-11-18T20:10:02.503 に答える