短いバージョン:はい、どこでも文字列を使用します。
アノテーションに問題がない場合は、:
を使用してください[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
それ以外の場合は、クラスマップを使用できます:
BsonClassMap.RegisterClassMap<i_YourModel>(cm =>
{
cm.AutoMap();
cm.SetIdMember(cm.GetMemberMap(x => x.Id)
.SetIdGenerator(StringObjectIdGenerator.Instance));
}
);
ロングバージョン:
モデルとサービスレイヤーでは、可能な限り(可能な場合)、基盤となるデータベース実装に直接接続されていない不透明なものを使用することをお勧めします。
以前は、通常は大きな数字である主キーIDが、データベースの数字の主キー列にマップされていました。ただし、新しいIDを新しいエンティティに割り当てるときは、データベースをチェックして、一意のIDがあることを確認する必要がありました。 LO-HI idジェネレーターから、auto_increment列、シーケンスなど、多くの手法が存在します。
NoSQLとより多くの並列処理の必要性により、ほとんどのアプリケーションはUUIDまたはそのバリエーションを使用しています。これは、IDを妥当な確率で生成できるため、データベースに本当に一意であるかどうかを尋ねたり、シーケンスを使用したりすることなく、一意になるためです。水平方向にスケーリングするアプリケーションのボトルネックなどです。
MongoDBも違いはなく、UUIDの一種であるObjectIdを使用します。
これらのID(mongoとその他の両方)は、常に文字列として表すことができます。通常は、キーを構成するバイトのHEX表現です。したがって、モデルではStringをIDとして使用し、サービスレイヤーでも同じように、データレイヤーでは、基盤となるデータベース実装(この場合はMongoDB)に適した形式に変換します。