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