私はかなり複雑なシステムを設計中です。私たちの主な関心事の 1 つは、SQL Server のピア ツー ピア レプリケーションのサポートです。アイデアは、地理的に離れた複数のノードをサポートすることです。
2 つ目の懸念事項は、中間層で最新の ORM を使用することです。私たちが最初に選んだのは常に Entity Framework でした。これは主に、開発者が Entity Framework で作業することを好むためです。(彼らは LiNQ サポートが大好きです。)
だからここに問題があります:
ピア ツー ピア レプリケーションを念頭に置いて、すべてのテーブルの主キーに、uniqueidentifier をデフォルト値の newsequentialid() で使用することにしました。これにより、キーの競合を回避することとインデックスの断片化を減らすことのバランスが取れているように見えました。
ただし、現在のバージョンの Entity Framework には非常に奇妙な制限があることが判明しました。エンティティのキー列が一意の識別子 (GUID) である場合、データベースによって提供される既定値 (newsequentialid()) を使用するように構成することはできません。アプリケーション層は GUID を生成し、キー値を設定する必要があります。
だからここに議論があります:
- Entity Framework を放棄し、別の ORM を使用します。
- NHibernate を使用し、LiNQ サポートをあきらめる
- linq2sql を使用し、将来のサポートを断念します (DB 上の SQL Server にバインドされることは言うまでもありません)
- GUID を放棄し、別の PK 戦略を採用する
- アプリケーション層で順次 GUID (COMBs?) を生成する方法を考案する
私は linq2sql (私の開発者は linq2[stuff] が本当に好きです) と 3 でオプション 1 に傾いています。開発者の視点。
洞察や意見をいただければ幸いです。