2012-08-23 20 views
5

Estoy tratando de construir un método genérico para manejar todas mis actualizaciones parciales a través de MongoDB C# conductor, utilizando el siguiente método:actualización parcial en MongoDB C# Conductor - Diccionario tema

public bool UpdateObject<T>(UpdatableObject<T> updatableObject) 
    where T : new() 
{ 
    var builder = GenerateMongoUpdateBuilder(updatableObject.ModifiedFields); 
    var collection = GetCollection<T>(); 
    var result = collection.Update(Query.EQ("_id", BsonValue.Create(updatableObject.Id)), builder, new MongoUpdateOptions { Flags = UpdateFlags.Multi }); 
    return result.UpdatedExisting; 
} 

private static UpdateBuilder GenerateMongoUpdateBuilder(Dictionary<string, object> modifiedFields) 
{ 
    var builder = new UpdateBuilder(); 
    foreach (var modifiedField in modifiedFields) 
    { 
     var type = modifiedField.Value.GetType(); 
     if (type.IsPrimitive || type.IsValueType || (type == typeof(string))) 
     { 
      builder.Set(modifiedField.Key, BsonValue.Create(modifiedField.Value)); 
     } 
     else 
     { 
      builder.Set(modifiedField.Key, modifiedField.Value.ToBsonDocument()); 
     } 
    } 
    return builder; 
} 

que tuvo que luchar por una mientras que hasta que encontré la solución para manejar tipos primitivos a través de BsonValue y tipos no primitivos a través de BsonDocument. Todo funcionó bien, hasta ... Creamos un objeto que contiene un diccionario. El inserto funciona perfectamente, pero una vez que se actualiza (utilizando este método), ya no se puede deserializar. Mirar el objeto en el Mongo antes y después de la actualización indica que ya no es el mismo objeto: después de la actualización tiene un campo adicional _t que contiene "System.Collections.Generic.Dictionary`2 [System.String, [SomeObject, SomeObjectAssembly] ]"

asi que estoy empezando a cuestionar mi aplicación ...

Cualquier idea de lo que estoy haciendo mal?

Gracias, Nir.

+0

Eso suena muy parecido a un error. Sugiero que obtengas mejores instrucciones de reprografía y te dirijas a su [sitio jira] (https://jira.mongodb.org/browse/CSHARP) para informarlo – kelloti

+0

Lo que hace Dictionary termina igual que cuando lo haces. ToBsonDocument() en él? –

+0

Este es el resultado: {"_t": "System.Collections.Generic.Dictionary'2 [System.String, [SomeObject, SomeObjectdll]]", "_v": {"f5030d52-cd70-404f-a3b4-072b6261e2c3" : {"_id": 0, "Nombre": "Prueba"}, ... entradas adicionales aquí ... – nirpi

Respuesta

0

Con la cortesía de Robert Stam, se resolvió el problema. Todo está descrito en el ítem Jira. ¡Gracias!

Cuestiones relacionadas