2016-07-23 64 views
1

使用C#蒙戈驱动程序版本1 Repository更新文件V2从驱动器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)); 
     } 

我的代码,我修改代码,C#驱动程序版本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); ; 

    } 

我通过调用( controller):

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

我没有收到文档update.Do you know wh at是我的迁移代码的问题。

感谢

回答

1

你叫不await_collection.UpdateOneAsync(query, update);异步方法,它是不是你的问题的根本原因,但你有没有适当的例外在这种情况下处理。
无论await或使用相应的同步版本UpdateOne


你可能也更愿意使用ReplaceOne作为与V1司机最初的版本也做了一个整个文件替换。以下应该适合您的需求(未经测试)

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

感谢您的帮助,它的工作原理。 – kn3l

+0

我可以使用async .. await +异步方法吗?掺在一起? – kn3l