日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
LinqTrackingChanges機(jī)制

本文向大家介紹Linq Tracking Changes機(jī)制,可能好多人還不了解Linq Tracking Changes機(jī)制,沒有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。

創(chuàng)新互聯(lián)公司是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅(jiān)持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過去的10年時(shí)間我們累計(jì)服務(wù)了上千家以及全國政企客戶,如成都服務(wù)器托管等企業(yè)單位,完善的項(xiàng)目管理流程,嚴(yán)格把控項(xiàng)目進(jìn)度與質(zhì)量監(jiān)控加上過硬的技術(shù)實(shí)力獲得客戶的一致稱贊。

Linq Tracking Changes機(jī)制

OK,我們能夠順利的由WCF Service取得資料,那么接下來的更新動(dòng)作該如何做呢?,照MSDN中『順帶一提』的說明中,要于N-Tier情況下實(shí)作更新功能必須視UI層而定,于ASP.NET中可透過ObjectDataSource 控件的協(xié)助完成,但在WPF、Windows Form中,程式設(shè)計(jì)師則必須自行實(shí)作Client端的Linq Tracking Changes機(jī)制。

那什么是Linq Tracking Changes機(jī)制呢?簡單的說,更新一筆資料需要有兩個(gè)資訊,一是Entity Object的現(xiàn)值,一則是Entity Object的原始值,在更新資料時(shí),我們必須將這兩個(gè)資訊送達(dá)WCF Service,然后由WCF Service依據(jù)原值來取得欲更新的資料列后,將現(xiàn)值更新進(jìn)去。

問題在,LINQ To SQL Designer只是將Entity Class標(biāo)示為可序列化,并未產(chǎn)生出任何的Tracking Changes所需要的程式碼,這也就是說!在WPF端時(shí),我們必須于資料列更新時(shí),將原值先記錄下來,否則就無法透過WCF Service來更新該筆資料了。更確切的說,就是少了一個(gè)類似DataSet之GetChanges函式的機(jī)制。

那該如何實(shí)作這個(gè)機(jī)制呢?很幸運(yùn)的,LINQ To SQL Designer所產(chǎn)生出的Entity Class實(shí)作了INotifyPropertyChanging介面,因此我們可掛載事件至其所定義的PropertyChanging事件中,于物件屬性值改變時(shí),事先將原值記錄下來,完成Linq Tracking Changes機(jī)制。但也很不幸的,透過WCF Service所產(chǎn)生的Proxy Class忽略了此介面,并沒有產(chǎn)生出對(duì)應(yīng)的程式碼,所以透過INotifyPropertyChanging介面來實(shí)作Tracking Changes的想法是不可能達(dá)到的。

退而求其次,我們只能以Context的概念來實(shí)作Tracking Changes,也就是說于取得物件的同時(shí),將所有物件復(fù)制一份,將原值保留下來,然后透過另一介面INotifyPropertyChanged來偵測(cè)物件是否已被改變。

 
 
 
  1. using System;  
  2. using System.ComponentModel;  
  3. using System.Collections.Generic;  
  4. using System.Linq;  
  5. using System.Text;  
  6. using System.Reflection;  
  7.    
  8. namespace WpfDataConsumer  
  9. {  
  10. public class TrackingContext,TUpdate> 
  11. {  
  12. …………….  
  13. public void Initialize(IList objs)  
  14. {  
  15. _states.Clear();  
  16. _update_original = typeof(TUpdate).GetProperty("Original");  
  17. _update_current = typeof(TUpdate).GetProperty("Current");  
  18. _update_state = typeof(TUpdate).GetProperty("State");  
  19. foreach (T item in objs)  
  20. {  
  21. object updateData = Activator.CreateInstance(typeof(TUpdate), false);  
  22. _update_original.SetValue(updateData, CloneObject(item),null);  
  23. _update_current.SetValue(updateData, item, null);  
  24. _update_state.SetValue(updateData,  
  25. WpfDataConsumer.DataService.UpdateState.UnChanged, null);  
  26. ((INotifyPropertyChanged)item).PropertyChanged +=  
  27. new PropertyChangedEventHandler(TrackingContext_PropertyChanged);  
  28. _states.Add(item, (TUpdate)updateData);  
  29. }  
  30. }  
  31.    
  32. void TrackingContext_PropertyChanged(object sender, PropertyChangedEventArgs e)  
  33. {  
  34. if (_states.ContainsKey((T)sender))  
  35. {  
  36. object o = _states[(T)sender];  
  37. DataService.UpdateState state =  
  38. (DataService.UpdateState)_update_state.GetValue(o, null);  
  39. if (state == WpfDataConsumer.DataService.UpdateState.Insert)  
  40. return;  
  41. _update_state.SetValue(o,  
  42. WpfDataConsumer.DataService.UpdateState.Update, null);  
  43. }  
  44. }  
  45. }  

有了Linq Tracking Changes機(jī)制的協(xié)助后,WCF Service端可以獲得欲更新資料物件的原值與現(xiàn)值,要更新資料就不難了。


網(wǎng)頁題目:LinqTrackingChanges機(jī)制
網(wǎng)站路徑:http://m.5511xx.com/article/ccdoggj.html