Mongodb 更新C#驱动程序v2中的文档从驱动程序v1迁移
我的代码使用C#Mongo驱动程序版本1Mongodb 更新C#驱动程序v2中的文档从驱动程序v1迁移,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,我的代码使用C#Mongo驱动程序版本1Repository /// <summary> /// Generic update method to update record on the basis of id /// </summary> /// <param name="queryExpression"></param> /// <param name="
Repository
/// <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));
}
我没有得到文档更新。你知道我的迁移代码有什么问题吗
谢谢您调用了一个异步方法,而不使用
wait
和\u collection.UpdateOneAsync(查询,更新)代码>这不是问题的根本原因,但在这种情况下,您没有适当的异常处理。
等待它或使用相应的同步版本
您可能还希望使用V1驱动程序作为初始版本,并对整个文档进行替换。以下内容应符合您的需要(但未经测试)
。。。
var query=Builders.Filter.Eq(queryExpression,id);
_collection.ReplaceOne(查询、实体);
...
我可以使用异步吗。。等待+异步方法?混在一起?
/// <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); ;
}
public void Update(PostModel post)
{
_postRepo.Posts.Update(s => s.Id, post.Id, post);
}
...
var query = Builders<T>.Filter.Eq(queryExpression, id);
_collection.ReplaceOne(query, entity);
...