データベース内のエンティティの主キーとして Guid を使用します。伝統的に、INSERT 中にデータベースにエンティティの ID を設定させるパターンに従ってきましたが、これは通常、自動インクリメント フィールドなどを使用して物事を処理する方法であるためだと思います。
オブジェクトの構築中にコードでキー割り当てを行う方がはるかに便利であることがますますわかっています。主な理由は次の 2 つです。
- オブジェクトのコンストラクターが実行されると、そのすべてのフィールドが初期化されていることがわかります。「中途半端な」オブジェクトが動き回ることはありません。
- 操作のバッチを実行する必要があり、そのうちのいくつかはオブジェクトのキーを知っていることに依存している場合、データベースへのラウンドトリップなしで一度にすべて実行できます。
このように物事を行わないやむを得ない理由はありますか? つまり、Guid をキーとして使用する場合、キーの割り当てをデータベースに任せる正当な理由はありますか?
編集: Guid を PK に使用する必要があるかどうかについて多くの人が強い意見を持っています (私は知っていました) が、それは私の質問のポイントではありませんでした。
クラスタリングの問題 (インデックスを適切に設定すれば問題にはならないようです) を除けば、アプリケーション層でキーを作成しないようにする説得力のある理由は見当たりません。