1

公式の C# ドライバーを使用して MongoDB POCO エンティティの新しいコピーを作成する最良の方法は何ですか?

私はこれを試しました;

    public T Clone()
    {
        var bsonWriter = new BsonDocumentWriter(new BsonDocument(), BsonDocumentWriterSettings.Defaults);
        BsonSerializer.Serialize(bsonWriter, this);
        var newDoc = bsonWriter.ToBsonDocument(typeof(T));
        var e = BsonSerializer.Deserialize(newDoc , typeof(T));
        return e as T;

    }//Clone()

しかし、私が得るのはヌルでいっぱいの空のオブジェクトだけです。ちなみに、POCO オブジェクトは BsonDocument から継承されませんが、正常にシリアル化され、装飾されているすべての Bson 属性を活用したいため、他の方法でコピーしたくありません。DBドライバーが行うように、コピーが必要です。

4

1 に答える 1

7

それよりもはるかに簡単です。

using MongoDB.Bson;
using MongoDB.Bson.Serialization;

//...

var test = new Test { Id = ObjectId.GenerateNewId(), Name = "Jack" };
var doc = test.ToBsonDocument();
var copy = BsonSerializer.Deserialize<Test>(doc);

ToBsonDocument 拡張メソッドがどのように機能するかを確認したい場合は、ToBsonDocument 拡張メソッドを参照してください。

于 2012-08-16T20:47:31.627 に答える