博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB学习笔记~为IMongoRepository接口更新指定字段
阅读量:6263 次
发布时间:2019-06-22

本文共 2033 字,大约阅读时间需要 6 分钟。

对于MongoDB来说,它的更新建议是对指定字段来说的,即不是把对象里的所有字段都进行update,而是按需去更新,这在性能上是最优的,这当然也是非常容易理解的,我们今天要实现的就是这种按需去更新,并且,我还是不希望将MongoDB的内核暴露出去,这时,我想到了EF时候的按需要更新,即为实体哪些属性赋值就更新哪些属性;这个功能实际上使用了表达式树,将你的属性和属性值存储到Expression里,然后在update方法内部再进行解析即可,具体代码如下

public void Update
(System.Linq.Expressions.Expression
> entity) where T : class { var query = new QueryDocument(); var fieldList = new List
>(); 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
.Update.Set(propertyName, propertyValue)); } else { query = new QueryDocument("_id",new ObjectId(propertyValue.ToString())); } } ForWait(() => _table.UpdateOneAsync(query, Builders
.Update.Combine(fieldList))); }

其实在方法调用上也是非常容易的,我们来看这个例子

[HttpPost]        public ActionResult Edit(WebManageUsers entity)        {            if (ModelState.IsValid)            {                _webManageUsersRepository.Update
(i => new WebManageUsers { Id = entity.Id, LoginName = entity.LoginName }); return RedirectToAction("Index"); } ModelState.AddModelError("", "请认真填写表单!"); return View(); }

通过上面代码我们可以看到,只是将需要更新的字段进行赋值即可!

转载地址:http://fdzpa.baihongyu.com/

你可能感兴趣的文章
[SP694][SP705]DISUBSTR - Distinct Substrings/SUBST1 - New Distinct Substrings[SA]
查看>>
Jquery 选择器大全 【转载】
查看>>
066、Weave如何与外网通信?(2019-04-09 周二)
查看>>
shell脚本入门
查看>>
【转】oracle in与exists语句的区别
查看>>
python之正则表达式模块
查看>>
学习AOP之认识一下Spring AOP
查看>>
用PhoneGap创建第一个项目
查看>>
vue 2.0 开发实践总结之疑难篇
查看>>
iOS开发中的错误整理,(百思项目,指示器位置)设置控件尺寸和点坐标,先设置尺寸,再设置点坐标...
查看>>
(C/C++学习)7.数组及其访问方式
查看>>
LeetCode——Intersection of Two Linked Lists
查看>>
对拍——我目前可以找到的最简写法
查看>>
js之广告弹出自动关闭
查看>>
axios请求requestBody和formData
查看>>
PSQL_标准API和Interface基本的用法和比较(概念)
查看>>
网站目录
查看>>
APUE-文件和目录(七)符号链接
查看>>
CSS 简介
查看>>
System Verilog基础(二)
查看>>