文章出處
文章列表
注意,這里說的值對象是指在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是這樣的)
在對值對象賦值時,我們可以按字段賦值,也可以按對象去賦值,按對象賦值,它對將原對象覆蓋!
var e1 = repository1.Find("556e8f2c2683c8105c9e501f"); e1.Name = "wet"; e1.Contact.PostCode = "100001";//為字段賦值 e1.Contact = new Contact { Email = "bfyxzls@sina.com" };//為實體賦值,原實體被覆蓋 repository1.Update(e1);
更新的結果,只有Email字段有值,其它字段被覆蓋,這是正常的
MongoDB等待大家去探索,研究...
文章列表
全站熱搜