之前已经发生了

大叔之前讲过被仓储化了的Mongodb,而在大叔开发了Lind.DDD之后,决定把这个东西再搬到本框架的仓储层来,这也是大势所趋的,毕竟mongodb是最像关系数据库的NoSql,它的使用场景是其它nosql所不能及的,这点是毋庸置疑的!

下面是大叔总结的Mongodb文章目录,选自<大叔Mongodb系列>

MongoDB学习笔记~环境搭建 (2015-03-30 10:34)

MongoDB学习笔记~MongoDBRepository仓储的实现 (2015-04-08 12:00)

MongoDB学习笔记~ObjectId主键的设计 (2015-04-09 13:08)

MongoDB学习笔记~客户端命令行的使用 (2015-04-10 13:40)

MongoDB学习笔记~索引提高查询效率 (2015-04-10 15:35)

MongoDB学习笔记~为IMongoRepository接口添加分页取集合的方法 (2015-04-11 22:13)

MongoDB学习笔记~Mongo集群和副本集 (2015-04-17 16:25)

MongoDB学习笔记~为IMongoRepository接口添加了排序和表达式树,针对官方驱动 (2015-04-27 22:11)

MongoDB学习笔记~为IMongoRepository接口添加了增删改方法,针对官方驱动 (2015-04-29 22:36)

MongoDB学习笔记~为IMongoRepository接口更新指定字段(2015-04-30 22:22)

MongoDB学习笔记~关于官方驱动集成IQueryable之后的一些事

MongoDB学习笔记~以匿名对象做为查询参数,方便查询子对象

MongoDB学习笔记~Update方法更新集合属性后的怪问题

MongoDB学习笔记~批量插入方法的实现

MongoDB学习笔记~自己封装的Curd操作(查询集合对象属性,更新集合对象)

MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件)

MongoDB学习笔记~MongoDB实体中的值对象

MongoDB学习笔记~大叔框架实体更新支持N层嵌套~递归递归我爱你!

MongoDB学习笔记~大叔分享批量添加—批量更新—批量删除

MongoDB学习笔记~MongoVUE对数据进行查询,排序和按需显示

MongoDB学习笔记~管道中的分组实现group+distinct

MongoDB学习笔记~官方驱动的原生Curd操作

MongoDB学习笔记~官方驱动嵌套数组对象的更新

MongoDB学习笔记~使用原生语句实现三层集合关系的更新

MongoDB学习笔记~数据结构与实体对象不一致时,它会怎么样?

Lind.DDD里的仓储模块,Mongodb有一席之地

大叔的Mongodb仓储结构

大叔在设计mongodb查询和更新时,使用到了递归

  /// <summary>/// 按需要更新的构建者/// 递归构建Update操作串/// </summary>/// <param name="fieldList"></param>/// <param name="property"></param>/// <param name="propertyValue"></param>/// <param name="item"></param>/// <param name="fatherValue"></param>/// <param name="father"></param>private void GenerateRecursionExpress(List<UpdateDefinition<TEntity>> fieldList,PropertyInfo property,object propertyValue,TEntity item,object fatherValue,string father){//复杂类型if (property.PropertyType.IsClass && property.PropertyType != typeof(string) && propertyValue != null){//集合if (typeof(IList).IsAssignableFrom(propertyValue.GetType())){var modifyIndex = 0;//要更新的记录索引foreach (var sub in property.PropertyType.GetProperties(BindingFlags.Instance | BindingFlags.Public)){if (sub.PropertyType.IsClass && sub.PropertyType != typeof(string)){var arr = propertyValue as IList;if (arr != null && arr.Count > 0){var oldValue = property.GetValue(fatherValue ?? item) as IList;if (oldValue != null){for (int index = 0; index < arr.Count; index++){for (modifyIndex = 0; modifyIndex < oldValue.Count; modifyIndex++)if (sub.PropertyType.GetProperty(EntityKey).GetValue(oldValue[modifyIndex]).ToString()== sub.PropertyType.GetProperty(EntityKey).GetValue(arr[index]).ToString())//比较_id是否相等break;foreach (var subInner in sub.PropertyType.GetProperties(BindingFlags.Instance | BindingFlags.Public)){if (string.IsNullOrWhiteSpace(father))GenerateRecursionExpress(fieldList, subInner, subInner.GetValue(arr[index]), item, arr[index], property.Name + "." + modifyIndex);elseGenerateRecursionExpress(fieldList, subInner, subInner.GetValue(arr[index]), item, arr[index], father + "." + property.Name + "." + modifyIndex);}}}}}}}//实体else{foreach (var sub in property.PropertyType.GetProperties(BindingFlags.Instance | BindingFlags.Public)){if (string.IsNullOrWhiteSpace(father))GenerateRecursionExpress(fieldList, sub, sub.GetValue(propertyValue), item, property.GetValue(fatherValue), property.Name);elseGenerateRecursionExpress(fieldList, sub, sub.GetValue(propertyValue), item, property.GetValue(fatherValue), father + "." + property.Name);}}}//简单类型else{if (property.Name != EntityKey)//更新集中不能有实体键_id
                {if (string.IsNullOrWhiteSpace(father))fieldList.Add(Builders<TEntity>.Update.Set(property.Name, propertyValue));elsefieldList.Add(Builders<TEntity>.Update.Set(father + "." + property.Name, propertyValue));}}}

让代码去改变我们的生活,改变我们的世界吧!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:Lind.DDD.Repositories.Mongo层介绍,如需转载请自行联系原博主。

Lind.DDD.Repositories.Mongo层介绍相关推荐

  1. Lind.DDD.Events领域事件介绍

    闲话多说 领域事件大叔感觉是最不好讲的一篇文章,所以拖欠了很久,但最终还是在2015年年前(阴历)把这个知识点讲一下,事件这个东西早在C#1.0时代就有了,那时学起来也是一个费劲,什么是委托,哪个是事 ...

  2. Lind.DDD.Paging分页模块介绍

    分页组件网上有很多,MVC.Pager,JSPager等,通过实现方式大体分为前端分页和后端分页,前端分页是前台对list内存本地集合进行分页,缺点就是在大数据情况下,内存占用过高:后端分页就是UI把 ...

  3. Redis学习笔记~Redis事务机制与Lind.DDD.Repositories.Redis事务机制的实现

    回到目录 Redis本身支持事务,这就是SQL数据库有Transaction一样,而Redis的驱动也支持事务,这在ServiceStack.Redis就有所体现,它也是目前最受业界认可的Redis驱 ...

  4. Lind.DDD敏捷领域驱动框架~介绍

    最近觉得自己的框架过于复杂,在实现开发使用中有些不爽,自己的朋友们也经常和我说,框架太麻烦了,要引用的类库太多:之前架构之所以这样设计,完全出于对职责分离和代码附复用的考虑,主要参考了微软的DDD大作 ...

  5. Lind.DDD敏捷领域驱动框架~Lind.DDD各层介绍

    回到目录 Lind.DDD项目主要面向敏捷,快速开发,领域驱动等,对于它的分层也是能合并的合并,比之前大叔的框架分层更粗糙一些,或者说更大胆一些,在开发人员使用上,可能会感觉更方便了,更益使用了,这就 ...

  6. Lind.DDD.Domain领域模型介绍

    Lind.DDD.Domain位于Lind.DDD核心项目中,它主要面向领域实体而设计,由一个IEntity的标识接口,EntityBase基类和N个Entity实体类组成,其中IEntity主要用来 ...

  7. Lind.DDD.LindAspects方法拦截的介绍

    回到目录 什么是LindAspects 之前写了关于Aspects的文章<Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP>,今天主要在设计思想上进 ...

  8. Lind.DDD.Caching分布式数据集缓存介绍

    戏说当年 大叔原创的分布式数据集缓存在之前的企业级框架里介绍过,大家可以关注<我心中的核心组件(可插拔的AOP)~第二回 缓存拦截器>,而今天主要对Lind.DDD.Caching进行更全 ...

  9. Lind.DDD.Messaging框架通讯组件介绍

    大 家好,今天有时间来介绍一下Lind.DDD框架里的消息机制,消息发送这块一般的实现方法是将Email,SMS等集成到一个公用类库里,而本身 Email和SMS没什么关系,它们也不会有什么接口约定, ...

最新文章

  1. SharePoint 2010 BI(2):使用Visio“.NET研究” Service
  2. 客房收费系统数据库设计
  3. linux孟庆昌第六章课后题_第六章课后练习题答案
  4. Oracle RAC学习笔记:基本概念及入门
  5. 物联网卡为什么会这么火,主要有哪些优势?
  6. jaxp与dom4j遍历xml树
  7. springMVC中获取request 对象
  8. C++ 与 python 语法 对比
  9. Cknife流量分析
  10. 如何从当前文件夹直接打开cmd快捷键
  11. python步态识别算法_步态识别
  12. 修改html倒计时,利用自定义HTML小工具实现倒计时
  13. web前端期末大作业--HTML+CSS+JS实现美女拼图游戏
  14. DDR功能点 ODT ZQ校准
  15. python documents in chinese_基于 Python 的简单自然语言处理实践
  16. 高考色彩静物组合想要画好?画之前注意下这8点:
  17. 4台机器完全分布式安装hadoop,bigbrother的补充
  18. ChinaNet无线接入后,浏览器自动跳转到登陆界面的原理
  19. 阿克曼移动机器人优势介绍
  20. CSM32RV20--RISCV核单片机RISC-V低功耗MCU开发板核心板国产32位MCU替代STM32F030系列

热门文章

  1. access制作卡片_(2020年编辑)Access入门教程大全
  2. 小微企业四大授信流程
  3. 微信or支付宝交易限额
  4. verilog学习五点经验分享 http://bbs.21ic.com/icview-402231-1-1.html
  5. Java IO流使用详解
  6. oracle打开scott用户_启用Oracle中的scott用户
  7. 3D游戏建模布线方法
  8. 树莓派开发系列教程2——树莓派上手使用
  9. 华为的备胎被迫转正。
  10. 安卓镜像刻录软件_安卓8.0开发者预览版镜像系统下载-Android O开发者预览版镜像官方正式版-东坡下载...