你的位置:首页 > 数据库

[数据库]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字段有值,其它字段被覆盖,这是正常的