MongoDB學習筆記~MongoDB實體中的(de)值對(dui)象(xiang)
注意,這里說的值對象是指在MongoDB實體類中的,并不是DDD中的值對象,不過,兩者也是聯系,就是它是對類的補充,自己本身沒有存在的價值,而在(zai)值對(dui)象(xiang)(xiang)中,也(ye)(ye)(ye)是不需要(yao)有主鍵(jian)Id的,這與DDD也(ye)(ye)(ye)是不謀而合的,也(ye)(ye)(ye)是可以理(li)解的,因(yin)為它只是對(dui)主對(dui)象(xiang)(xiang)的一種(zhong)補(bu)充說明,自己不存在(zai)任何意義,所以要(yao)主鍵(jian)也(ye)(ye)(ye)沒(mei)什么用,呵(he)(he)呵(he)(he).
看一個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在(zai)Person中(zhong)就(jiu)是(shi)個值(zhi)對(dui)象(xiang)(xiang),它沒有Id,它只是(shi)對(dui)Person的(de)(de)補(bu)充(chong),即,它是(shi)一種聯系(xi)方式的(de)(de)封裝(zhuang),注意,在(zai)MongoDB實體中(zhong),建立(li)主對(dui)象(xiang)(xiang)時,一定要為值(zhi)對(dui)象(xiang)(xiang)和關系(xi)對(dui)象(xiang)(xiang)賦值(zhi),這是(shi)必要的(de)(de),當然賦值(zhi)后,值(zhi)對(dui)象(xiang)(xiang)的(de)(de)值(zhi)為空(kong),這也(ye)是(shi)正常的(de)(de),也(ye)是(shi)必要的(de)(de),如(ru)果不為它
賦值,那(nei)么mongodb是不讓你去update的(de)(de)(c# driver是這樣(yang)的(de)(de))
在對值對象賦值時,我們可以按字段賦值,也可以按對象去賦值,按對象賦值,它對將原對象覆蓋!
var e1 = repository1.Find("556e8f2c2683c8105c9e501f"); e1.Name = "wet"; e1.Contact.PostCode = "100001";//為字(zi)段賦值(zhi) e1.Contact = new Contact { Email = "bfyxzls@sina.com" };//為實體(ti)賦(fu)值,原實體(ti)被覆蓋 repository1.Update(e1);
更新的結果(guo),只有Email字段(duan)有值,其(qi)它字段(duan)被覆蓋,這是正常的
MongoDB等待大(da)家(jia)去(qu)探(tan)索,研究...