你的位置:首页 > 数据库

[数据库]MongoDB学习笔记~MongoDB实体中的值对象

回到目录

注意,这里说的值对象是指在MongoDB实体类中的,并不是DDD中的值对象,不过,两者也是联系,就是它是对类的补充,自己本身没有存在的价值,而在值对象中,也是不需要有主键Id的,这与DDD也是不谋而合的,也是可以理解的,因为它只是对主对象的一种补充说明,自己不存在任何意义,所以要主键也没什么用,呵呵.

看一个MongoDB的值对象contact

  public class Person  {    public Person()    {      Contact = new Test.Contact();      AddList = new List<Test.Address>();      Id = MongoDB.Bson.ObjectId.GenerateNewId().ToString();    }    [BsonId]    [BsonRepresentation(BsonType.ObjectId)]    public string Id { get; set; }    public string Name { get; set; }    public DateTime LastContact { get; set; }    public DateTime Birthday { get; set; }    public int Age { get; set; }    public Address Address { get; set; }    public List<Address> AddList { get; set; }    /// <summary>    /// 值对象    /// </summary>    public Contact Contact { get; set; }  }

  public class Contact  {    public string Address { get; set; }    public string PostCode { get; set; }    public string Email { get; set; }  }

大家看到Contact在Person中就是个值对象,它没有Id,它只是对Person的补充,即,它是一种联系方式的封装,注意,在MongoDB实体中,建立主对象时,一定要为值对象和关系对象赋值,这是必要的,当然赋值后,值对象的值为空,这也是正常的,也是必要的,如果不为它

赋值,那么mongodb是不让你去update的(c# driver是这样的)


更新的结果,只有Email字段有值,其它字段被覆盖,这是正常的

去俄罗斯旅游要多少钱俄罗斯旅游报价俄罗斯旅游团报价广西阳朔四日三晚旅游攻略 什么时候去陕西旅游最好? 韶关旅游攻略2015 清远玄真漂流刺激吗安全吗?玄真漂流攻略? 玄真漂流开放时间?清远玄真漂流几点结束? 广州到清远玄真漂流怎么走?广州到清远玄真峡谷漂流有多远? 九寨沟珍珠滩瀑布介绍 成都大熊猫基地怎么去 九寨沟诺日朗瀑布 广州市增城市新塘镇邮政编码? 肇庆盘龙峡景区怎么样?盘龙峡有什么好玩的地方? 广州大学城到沙湾古镇自驾游怎么走? MOSFET Semiconductor DTA114TSATP Datasheet MOSFET Semiconductor DTA124GSATP Datasheet T322B275M015TR Datasheet T322B334K050 Datasheet EKXJ401ELL101MU40S Datasheet EKXJ401ELL101MU45S Datasheet 重庆旅游职业教育网 重庆旅游职业教育网 重庆旅游职业教育网 重庆旅游职业学校 重庆旅游职业学校 重庆旅游职业学校