0

SetIdMember()オブジェクト内の要素を指すようにクラスマップのを設定しました。

BsonClassMap.RegisterClassMap<Person>(x =>
    {
        x.AutoMap();
        x.SetIdMember(x.GetMemberMap(p => p.PersistedId));
    });

これは正常に機能しますが、(MongoVUEを介して)mongoデータを調べたところ、PersistedIdフィールドがデータベースのどこにも保存されていないことに気付きました。これは、_idフィールドにマップされているためだと思います。

シナリオの99%については、これで問題ないと確信していますが、この場合、強く型付けされていないモデルを使用し、生のBsonDocumentをプルバックし、それをJSONに変換してクライアント側のスクリプトに渡し、さらに使用します。ただし、JSONでPersistedIdフィールドを取得することを期待していますが、存在せず、_idだけです。

では、一意の_idフィールド全体を実行するだけでなく、PersistedIdフィールドをデータベースに書き出す方法はありますか?(データが複製されることはわかっていますが、大きな心配はありません)

4

1 に答える 1

1

読み取り専用プロパティを追加して、それを PersistedId としてデータベースに保存するようにドライバーに知らせることができます。

public class Entity
{
    public ObjectId Id { get; set; }

    public ObjectId PersistedId 
    {
        get { return Id; }
    }
}

BsonClassMap.RegisterClassMap<Person>(x =>
{
    x.AutoMap();
    x.MapMember(x => x.PersistedId);
});

ただし、これが最善のアイデアかどうかはわかりません。このようなサーバー環境では、データベース モデルを UI と共有するべきではありません。むしろ、データベース モデルから UI モデルにマッピングする必要があります。これにより、モデルの集約、モデルの変換など、多数の利点が提供されるため、UI が UI に結合されます。しかし、最終的には、それはあなたの電話です。

于 2012-12-21T22:47:29.120 に答える