1. ホーム
  2. c#

[解決済み] MongoDBでEnumを文字列として保存する

2023-07-01 22:58:43

質問

Enumを序数ではなく文字列名として保存する方法はありますか?

例を挙げます。

このようなenumがあると想像してください。

public enum Gender
{
    Female,
    Male
}

ここで、ある架空のUserが

...
Gender gender = Gender.Male;
...

はMongoDbのデータベースに{ ... "Gender" : 1 ... として格納されます。}

しかし、私はこのようなものがいいと思います { ... "Gender" : "Male" ... }

これは可能でしょうか?カスタムマッピング、リフレクションのトリック、何でも結構です。

私のコンテキスト 私はPOCO上で強く型付けされたコレクションを使用しています(まあ、私はARをマークし、時々ポリモーフィズムを使用します)。私は、Unit Of Workの形で薄いデータアクセス抽象化レイヤーを持っています。そのため、各オブジェクトをシリアライズ/デシリアライズしているわけではありませんが、いくつかのクラスマップを定義することができます(実際にしています)。私は公式のMongoDbドライバとfluent-mongodbを使用しています。

どのように解決するのですか?

MongoDB .NET ドライバ を使うと規約を適用できます。 を適用して、CLR 型とデータベース要素の間の特定のマッピングをどのように処理するかを決定できます。

これをすべての列挙型に適用したい場合、すべての型に属性を追加したり、すべての型を手動でマッピングするのではなく、AppDomainごとに1回だけ(通常はアプリケーションを起動するとき)規約を設定する必要があります。

// Set up MongoDB conventions
var pack = new ConventionPack
{
    new EnumRepresentationConvention(BsonType.String)
};

ConventionRegistry.Register("EnumStringConvention", pack, t => true);