解讀ADO代碼具體學(xué)習(xí)研究課程
要了解ADO代碼你必須要學(xué)一下這個(gè)基礎(chǔ)課程,需要指定SetModifiedProperty()來(lái)指確定修改的字段名。我想,對(duì)于外部傳遞進(jìn)來(lái)的對(duì)象,要知道哪個(gè)字段修改了是不現(xiàn)實(shí)的。所以此方法被拋棄。
寫(xiě)一個(gè)更新類(lèi),把待更新的對(duì)象傳進(jìn)來(lái),這個(gè)對(duì)象可能是客戶(hù)端對(duì)象,比如ExtJs中的JSON對(duì)象,或者是FLEX中的自定義的ActionScript對(duì)象,這些對(duì)象通過(guò)傳入后,進(jìn)行轉(zhuǎn)換后就成了服務(wù)器端的AEF實(shí)體對(duì)象。
那就需要把對(duì)象進(jìn)行更新,償試了很多方式,ADO代碼EF的數(shù)據(jù)模型還是比較麻煩的,必須要對(duì)EntityState等狀態(tài)控制有所了解,參見(jiàn)文頭的推薦地址。
要把一個(gè)“分離對(duì)象”更新到EF,然后更新到DB,一般是采用ApplyPropertyChanges()方法,此方法可以把對(duì)象進(jìn)行全部覆蓋,ADO代碼但有一個(gè)很重要的問(wèn)題,在執(zhí)行此方法前,ObjectContext中必須要有此實(shí)列引用,如果沒(méi)有的話(huà),就會(huì)報(bào)“ObjectStateManager 不包含具有對(duì)“ServiceLibrary.Department”類(lèi)型的對(duì)象的引用的 ObjectStateEntry”的錯(cuò)。那么有兩種方法,#t#
一:通過(guò)主鍵,把數(shù)據(jù)從DB中取到ObjectContext中來(lái)。這樣的話(huà),是最簡(jiǎn)單的,只是感覺(jué)在更新前,還要執(zhí)行一次“獲取”,ADO代碼在性能上很不爽。不過(guò),畢竟是Key獲取,相信幾百萬(wàn)的數(shù)量級(jí)也不會(huì)有大問(wèn)題的。此方法還是我推薦的:如下
具體的ADO代碼如下:
- public string UpdateDepartment(Department dept)
- {
- using (var db = new FlexDbEntities())
- {
- //這句語(yǔ)句千萬(wàn)要有?。。?!。
- Department o1 = db.Department.First(p => p.Id == dept.Id);
- db.ApplyPropertyChanges("Department",dept);
- db.SaveChanges();
- }
- }