MongoDB学习笔记~为IMongoRepository接口更新指定字段
2015-04-30 22:22
477 查看
回到目录
对于MongoDB来说,它的更新建议是对指定字段来说的,即不是把对象里的所有字段都进行update,而是按需去更新,这在性能上是最优的,这当然也是非常容易理解的,我们今天要实现的就是这种按需去更新,并且,我还是不希望将MongoDB的内核暴露出去,这时,我想到了EF时候的按需要更新,即为实体哪些属性赋值就更新哪些属性;这个功能实际上使用了表达式树,将你的属性和属性值存储到Expression里,然后在update方法内部再进行解析即可,具体代码如下
其实在方法调用上也是非常容易的,我们来看这个例子
通过上面代码我们可以看到,只是将需要更新的字段进行赋值即可!
回到目录
对于MongoDB来说,它的更新建议是对指定字段来说的,即不是把对象里的所有字段都进行update,而是按需去更新,这在性能上是最优的,这当然也是非常容易理解的,我们今天要实现的就是这种按需去更新,并且,我还是不希望将MongoDB的内核暴露出去,这时,我想到了EF时候的按需要更新,即为实体哪些属性赋值就更新哪些属性;这个功能实际上使用了表达式树,将你的属性和属性值存储到Expression里,然后在update方法内部再进行解析即可,具体代码如下
public void Update<T>(System.Linq.Expressions.Expression<Action<T>> entity) where T : class { var query = new QueryDocument(); var fieldList = new List<UpdateDefinition<TEntity>>(); var param = entity.Body as MemberInitExpression; foreach (var item in param.Bindings) { string propertyName = item.Member.Name; object propertyValue; var memberAssignment = item as MemberAssignment; if (memberAssignment.Expression.NodeType == ExpressionType.Constant) { propertyValue = (memberAssignment.Expression as ConstantExpression).Value; } else { propertyValue = Expression.Lambda(memberAssignment.Expression, null).Compile().DynamicInvoke(); } if (propertyName != EntityKey)//更新集中不能有实体键_id { fieldList.Add(Builders<TEntity>.Update.Set(propertyName, propertyValue)); } else { query = new QueryDocument("_id",new ObjectId(propertyValue.ToString())); } } ForWait(() => _table.UpdateOneAsync(query, Builders<TEntity>.Update.Combine(fieldList))); }
其实在方法调用上也是非常容易的,我们来看这个例子
[HttpPost] public ActionResult Edit(WebManageUsers entity) { if (ModelState.IsValid) { _webManageUsersRepository.Update<WebManageUsers>(i => new WebManageUsers { Id = entity.Id, LoginName = entity.LoginName }); return RedirectToAction("Index"); } ModelState.AddModelError("", "请认真填写表单!"); return View(); }
通过上面代码我们可以看到,只是将需要更新的字段进行赋值即可!
回到目录
相关文章推荐
- MongoDB学习笔记~为IMongoRepository接口添加了增删改方法,针对官方驱动
- MongoDB学习笔记~为IMongoRepository接口添加分页取集合的方法
- 只更新指定字段
- 在Entity Framework中实现指定字段更新
- Mysql 一句SQL用数据库字段更新指定字段
- 从一表中查询数据后更新另一表的指定字段(PL/SQL)
- SQL两表匹配,将A表的指定字段所有内容根据条件更新B表指定字段的所有内容
- 新问题新方法:在Entity Framework中实现指定字段更新【转再】
- EF中更新指定字段
- EF 更新指定的字段
- Entity Framework 同一个上下文中,如何进行对同一个实体进行指定字段更新
- 淘宝api订单接口R2字段模糊化处理通知【白名单更新】
- Thinkphp中如何书写按照指定字段同步更新的ORM
- mysql指定将某个字段更新到另一个表中
- 用一个表的指定字段更新另一个表的指定字段值
- mysql存储过程(更新指定字段的数据)
- entity framework 5 更新指定字段
- php中sphinx的Query接口如何指定字段搜索呢?
- Entity Framework中实现指定字段更新