0

TranRefId を含むトランザクション テーブルがあります (購入と取り消しトランザクションをグループ化するため)。SQL データベースとのインターフェースは Entity Framework 4 を使用しています。

  1. TranRefId の値を明示的に指定する
  2. 何も指定されていない場合、値を自動生成します (MAX を照会してインクリメントするか、その他の方法で)。

これは Web アプリケーションであるため、複数のスレッドがこのアクションを同時に実行する可能性があるという懸念があります。Select Max(TranRefId) を実行して値をインクリメントすると、複数のトランザクションが同じ値になる可能性が高くなります (同時実行のため)。 このような同時実行の問題を解決するために、Entity Framework 内に解決策はありますか??


また、TranRefId はアカウントにのみ固有です。以下のサンプルデータを参照してください...

トランザクション テーブル (申し訳ありませんが、ここでテーブルを作成する他の方法がわかりません...)

TranId_ _ TranRefId _ _Account

1_ _ _ ____ 1 _ _ _ __ _ _ A
2
_ __ _ _ __ 1 _ _ _ _ _ A
3
_ _ __ _ __ 1 _ __ _ ____ B 4 _ __ _ __ _ _ 2 _ _ _ _ _ __ _ ____ B 5 _ __ _ __

_ _ 1 _ _ _ _ _ _C

4

2 に答える 2

1

TranRefId 列を int にする必要がない場合は、一意の識別子にすることができます。次に、新しい Guid を生成し、その値を設定することができます - それは常に一意であることがわかっています。

于 2012-09-06T14:55:39.530 に答える
1

テーブルに別の自動列を追加し、トリガー (yech!) で値が設定されているかどうかを確認し、そうでない場合は自動列の値を移動できると思います。

于 2012-09-07T12:07:14.147 に答える