成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linq Tracking Changes機制

開發 后端
這里介紹什么是Linq Tracking Changes機制呢?簡單的說,更新一筆資料需要有兩個資訊,一是Entity Object的現值,一則是Entity Object的原始值。

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

Linq Tracking Changes機制

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

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

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

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

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

  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<T,TUpdate> 
  11. {  
  12. …………….  
  13. public void Initialize(IList<T> 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機制的協助后,WCF Service端可以獲得欲更新資料物件的原值與現值,要更新資料就不難了。

【編輯推薦】

  1. Linq表達式樹簡單介紹
  2. Linq和dLinq區別剖析
  3. Lambda表達式和Linq查詢淺析
  4. Linq Lambda表達式概括
  5. Linq查詢本質簡單分析
責任編輯:佚名 來源: Sina
相關推薦

2010-08-11 09:40:44

LINQ

2009-09-17 13:54:26

LINQ to XML

2009-09-17 13:30:32

LINQ to XML

2009-09-09 15:44:22

Linq DataCo

2009-09-10 11:10:21

Linq Librar

2009-09-09 15:37:27

Linq DataLo

2009-09-10 13:42:47

Linq UserIn

2009-09-15 14:30:11

Linq連接

2009-09-15 16:31:15

LINQ Custom

2013-08-27 10:20:35

JavaLINQLinq4j

2014-12-25 16:02:55

TalkingData

2009-09-07 16:44:28

Linq String

2009-09-09 14:20:49

LINQ To Luc

2009-09-09 14:40:43

Linq to sql

2009-09-09 15:28:43

Linq to obj

2009-09-09 16:21:31

Linq使用sqlme

2009-09-09 16:53:53

LINQ查詢語法

2009-09-09 17:08:27

LINQ Expres

2009-09-10 11:29:00

LINQ to SQL

2009-09-10 14:21:58

LINQ匿名類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一区二区av | 午夜久久久久久久久久一区二区 | 国产成人精品一区二区在线 | 成人国产一区二区三区精品麻豆 | 日本a∨精品中文字幕在线 亚洲91视频 | 国产一级电影网 | 日韩欧美中文字幕在线视频 | 午夜网站视频 | 一区二区蜜桃 | 一区免费观看 | 精品国产一区二区三区久久影院 | 欧美日韩精品久久久免费观看 | 日韩在线观看网站 | 久久国产精品精品 | 欧美视频二区 | 国产成人在线一区二区 | 亚洲精品国产第一综合99久久 | 成人性视频免费网站 | 一区二区三区在线观看免费视频 | 国产精品免费看 | 天堂久| 性色av一区 | 久久精品一区二区三区四区 | 国产999精品久久久久久 | 最近中文字幕第一页 | 久久亚洲综合 | 国产精品免费一区二区三区四区 | 久久精品屋 | 亚洲丝袜天堂 | 免费黄色特级片 | 欧美亚洲国产日韩 | 国产精品永久 | 黄色在线观看网址 | 久久精品国产一区二区电影 | 91嫩草精品 | 久久天天躁狠狠躁夜夜躁2014 | 中文字幕高清视频 | 狠狠干美女 | 国产精品海角社区在线观看 | 日韩av资源站 | 中文字幕日韩欧美一区二区三区 |