2012-08-16 2 views
1

공식 C# 드라이버를 사용하여 MongoDB POCO 엔티티의 새 복사본을 만드는 가장 좋은 방법은 무엇입니까?C# 드라이버에서 BsonSerializer를 사용하여 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() 

그러나 내가 얻은 것은 모두 null로 가득 찬 빈 개체입니다. POCO 객체는 BsonDocument에서 상속받지 않지만 직렬화가 잘되어있어 장식 된 Bson Attributes를 모두 사용하려고합니다. 그래서 다른 방식으로 복사하고 싶지 않습니다. 나는 DB 드라이버가 그것을 할 것이라고 사본을 원한다.

답변

6

훨씬 쉽습니다.

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 확장 메서드를 살펴보십시오.

+0

환상적입니다. 감사! – cirrus