2012-10-12 48 views
5

Estoy creando algunas declaraciones de actualización con el controlador MongoDB C#. The C# API incluye los métodos Envuelto y "No envuelto" en el espacio de nombre Builder.Uso del controlador MongoDB C#: ¿envuelto o no envuelto?

En la superficie, parece que estos difieren por genéricos y no tener que usar un contenedor BSON. Sin embargo, ambos tipos de métodos me permiten pasar un parámetro no envuelto en Bson. ¿Hay una diferencia funcional entre los dos?

Por ejemplo (utilizando la versión 1.2 del conductor), aquí hay dos usos de Update.Set:

var myCollection = database.GetCollection<MyObject>(typeof(MyObject).Name); 

myCollection.Update(
    Query.EQ("_id", myId), 
    Update.Set("Message", "My message text")); 

// And now the same call with "Wrapped" method 
myCollection.Update(
    Query.EQ("_id", myId), 
    Update.SetWrapped("Message", "My message text")); 

¿Cuál es la diferencia entre estas dos llamadas? Si solo azúcar sintáctico - ¿por qué la necesidad de una versión envuelta?

Respuesta

5

No hay diferencia cuando establece un valor de cadena. Los métodos envueltos son necesarios cuando trabajas con tipos complejos: clases, listas, etc. (que no es BsonValue). Simplemente convierten correctamente los objetos al tipo BsonValue.

pequeño ejemplo:

con el conjunto no se puede hacer lo siguiente:

var item = new MyDemo(); 
Update.Set("Item", item) 

usted tiene que utilizar el método envuelta o ToBsonDocument extensión():

var item = new MyDemo(); 
Update.SetWrapped("Item", item) 

Eso es todo!

Una nota, el controlador y la mayoría de las piezas alrededor de mongodb son de código abierto. Por lo tanto, no es un gran problema para look at :)

+0

+1 para el recordatorio de código abierto. Siempre me olvido de eso. – SethO

Cuestiones relacionadas