0

LINQ を使用していますが、データベース テーブルに IDENTITY 列がありません (ただし、代理の主キー ID 列を使用しています)

これは機能しますか?

テーブルの ID 値を取得するために、GetIDValueForOrangeTable() というストアド プロシージャがあります。このプロシージャは、SystemValues テーブルを参照し、その中の ID をインクリメントします。組み込みの IDENTITY ではなく、挿入時にこの SystemValues テーブルから ID 値を取得するために LINQ を取得する方法はありますか?

余談ですが、これはあまり良い考えではないと思います。特に Web アプリケーションの場合はそうです。この SystemValues ルックアップのために、多くの同時実行の競合が発生すると思います。私の懸念は正当化されますか?

乾杯ダンカン

4

2 に答える 2

1

あなたの懸念は非常に正当です。2 人のユーザーが同時に挿入しようとした場合、marc_s で説明されているようにトランザクションに挿入しない限り、両方に同じ番号が与えられる可能性があります。ただし、トランザクションが挿入全体と id 値を含むテーブルをラップしない場合、外側の挿入が失敗すると、まだギャップがある可能性があります (値を取得したが、他の理由で挿入しなかった記録)。ほとんどの人はギャップ (ほとんどの場合、不必要な要件) を避けるためにこれを行うため、生活がより複雑になり、結果を達成できない可能性があります。ほとんどの場合、ID フィールドを使用することをお勧めします。

于 2009-08-11T17:18:00.510 に答える