2016-07-23 10 views
1

Mein Code mit C# Mongo Treiber Version1 RepositoryUpdate-Dokument in C# Treiber migrieren v2 von Treiber v1

 /// <summary> 
     /// Generic update method to update record on the basis of id 
     /// </summary> 
     /// <param name="queryExpression"></param> 
     /// <param name="id"></param> 
     /// <param name="entity"></param> 
     public void Update(Expression<Func<T, string>> queryExpression, string id, T entity) 
     { 
      var query = Query<T>.EQ(queryExpression, id); 
      _collection.Update(query, Update<T>.Replace(entity)); 
     } 

Und ich ändern Sie den Code in C# Treiberversion 2

/// <summary> 
    /// Generic update method to update record on the basis of id 


    /// </summary> 
    /// <param name="queryExpression"></param> 
    /// <param name="id"></param> 
    /// <param name="entity"></param> 
    public void Update(Expression<Func<T, string>> queryExpression, string id, T entity) 
    { 
     // var query = Query<T>.EQ(queryExpression, id); 
     //_collection.Update(query, Update<T>.Replace(entity)); 


     var query = Builders<T>.Filter.Eq(queryExpression, id); 
     var update = Builders<T>.Update.Set(queryExpression, id); 
     _collection.UpdateOneAsync(query, update); ; 

    } 

I unter Verwendung genannt (controller):

public void Update(PostModel post) 
     { 
      _postRepo.Posts.Update(s => s.Id, post.Id, post); 
     } 

ich das Dokument nicht bekommen update.Do Sie wh wissen ist das Problem mit meinem Migrationscode.

Dank

Antwort

1

Sie rufen eine asynchrone Methode ohne await mit _collection.UpdateOneAsync(query, update);, die nicht die Ursache des Problems ist aber Sie haben keine richtigen in diesem Fall der Handhabung Ausnahme.
Entweder await es oder die entsprechende synchrone Version UpdateOne


Sie wahrscheinlich verwenden, auch eher wollen ReplaceOne als Ihre erste Version mit dem V1-Treiber verwenden hat auch ein ganzes Dokument Ersatz. Folgendes sollte zu Ihren Bedürfnissen passen (nicht getestet)

... 
var query = Builders<T>.Filter.Eq(queryExpression, id); 
_collection.ReplaceOne(query, entity); 
... 
+0

Vielen Dank für Ihre Hilfe, es funktioniert. – kn3l

+0

Kann ich async .. erwarten + asynchrone Methode verwenden? zusammen mischen? – kn3l