2016-12-25 23 views
0

フィールドをIDとしてマークしないで、データベース内の数字を増やして重複を避けるにはどうすればいいですか?それを同時に増やす? (エンティティフレームワークとC#の使用)C#/ EF - データベースで非ID番号をインクリメントして重複を避ける方法

例1:最後の番号は5です。クライアント1はデータベースからそれを取り出します。クライアント2も同じです。クライアント1はそれを1つ増分してデータベースに戻します。最後の数字は6になります。しかし、クライアント2は最後の数字が5だと考えているので、6をもう一度挿入します。データベースは現在[5,6,6]です。期待される結果は[5,6,7]です。

例2:レーサーのテーブルがあります。各レーサーには、ID、名前、開始番号(IDと開始番号は関係ありません)があります。新しいレーサーを追加したいと思います。開始番号は1つ増えますが、他の人が同時に他のレーサーを追加した場合、IDは同じではありません。

言語に組み込まれているメカニズムはありますか?これはデータベースレベルでのみハンドリングできますか?

答えて

3

EFで並行性チェックを追加できます。エンティティに新しい列(RowVersionなど)を追加し、タイムスタンプ属性でマークします。

[Timestamp] 
public byte[] RowVersion { get; set; } 

タイムスタンプ属性は、この列が更新の Where句に含まれ、データベースに送信されたコマンドを削除することを指定します。 以前のバージョンのSQL サーバーは、SQLのローバージョン を置き換える前に、SQLタイムスタンプのデータ型を使用していたため、属性のタイムスタンプが呼び出されました。 rowversionの.Net型はバイト配列です。

詳しくはhereをご覧ください。

関連する問題