我们上一讲中介绍了大叔封装的Mongo仓储,其中介绍了几个不错的curd操作,而对于按需更新内部子对象,它是有条件的,即你的子对象不能为null,也就是说,我们在建立主对象时,应该为子对象赋一下初值,即new一下它,呵呵.
正确的mongo集合
对于赋过初值的子对象,在按需要更新时,有以下两种要注意一下
1 子对象的_id,如果已经存在,就更新它的值
2 子对象的_id,如果不存在,或者没有显示为_id赋值,则添加一条新的记录,即_id从新生成
而对于实体更新不存在这个问题,实体里的值会覆盖掉原表的值,下面看一下按需要更新的代码
#region 按需更新 repository1.Update<Person>(i => new Person { Id = "556d531e2683c818c86caddb", Address = new Address { Id = "556d531e2683c818c86ca123",/*不加id(或者id没有在集合中存在)就是向列表添加一条元素,id存在则更新指定的元素*/ Province = "luanxian", City = "111湖南占占大师", District = "小区", Seconds = 1 }, AddList = new List<Address>() { new Address { /*不加id(或者id没有在集合中存在)就是向列表添加一条元素,id存在则更新指定的元素*/ Id="556d531e2683c818c86cadde", Province = "luanxian", City = "湖南占占大师ddd", District = "小区", Seconds = 1 }} }); #endregion
对于整个更新,还是同样的问题,当然前提需要把表记录从库中获出来
#region 完整更新 var e1 = repository1.Find("556d531e2683c818c86caddb"); e1.Name = "wet"; e1.Address.City = "北京123"; /*遍历原来的集合,批量赋值*/ e1.AddList.ForEach(i => { i.City = "大占占"; }); /*为每个对象分别赋值,不指定ID被自动生成*/ e1.AddList = new List<Address> { new Address{City="占占1"}, new Address{City="占占2"} }; repository1.Update(e1); #endregion
对于MonoDB我们还需要继续去探索,研究...
本文转自博客园张占岭(仓储大叔)的博客,原文链接:MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件),如需转载请自行联系原博主。