從微軟(ruan)的(de)DBML文件(jian)中(zhong)我(wo)們(men)能學到什么(它告訴了我(wo)們(men)什么是(shi)微軟(ruan)的(de)重(zhong)中(zhong)之(zhi)重(zhong))~五 LINQ實體類(lei)中(zhong)對(dui)屬性的(de)賦值,變化(hua)前(qian)與變化(hua)后SendPropertyChanging與SendPropertyChanged
首先從這(zhe)一篇的文(wen)章標題(ti)中(zhong)可以看(kan)(kan)出,主(zhu)要(yao)(yao)是講dbml中(zhong)對實體的屬性(xing)(xing)賦值的相關(guan)知識,還有SendPropertyChanging與SendPropertyChanged這(zhe)兩個(ge)方法(fa),從第五講和第六講中(zhong)我們看(kan)(kan)到標題(ti)有些雷同,是的,但我講它們的側(ce)重點不同,第五講主(zhu)要(yao)(yao)講實體中(zhong)屬性(xing)(xing)賦值的過程(cheng),此時會用到SendPropertyChanging與SendPropertyChanged這(zhe)兩個(ge)方法(fa),而第六講,主(zhu)要(yao)(yao)是講這(zhe)兩個(ge)方法(fa)的作用,先透露一下(xia),主(zhu)要(yao)(yao)講事件觸發(fa)機(ji)制的,呵呵。
1 public string ExceptionID 2 { 3 get 4 { 5 return this._ExceptionID; 6 } 7 set 8 { 9 if ((this._ExceptionID != value)) 10 { 11 this.OnExceptionIDChanging(value); 12 this.SendPropertyChanging(); 13 this._ExceptionID = value; 14 this.SendPropertyChanged("ExceptionID"); 15 this.OnExceptionIDChanged(); 16 } 17 } 18 }
這是一種其中(zhong)的(de)(de)dbml實(shi)體類中(zhong)的(de)(de)代碼片段(duan),它主(zhu)要是為(wei)ExceptionID這個屬性賦值(zhi),get部分沒什么說的(de)(de),已經返(fan)回這個_ExceptionID字段(duan)的(de)(de)值(zhi),主(zhu)要看set部分,它的(de)(de)工作流(liu)程是:
1 判斷(duan)_ExceptionID變(bian)量是否(fou)等于(yu)原來(lai)的值
2 如果不等,調用OnExceptionIDChanging方法,表示開始修改這字段,它是一(yi)個分部方法,可以由開發(fa)人員根(gen)據(ju)自己的邏輯去實現它
3 調(diao)用(yong)屬(shu)性將要被修改方法SendPropertyChanging
4 對字段進行賦值
5 調用屬性(xing)已經被修(xiu)改方(fang)法SendPropertyChanged,并告訴方(fang)法修(xiu)改的字段為“ExceptionID”
6 OnExceptionIDChanged,表示(shi)這個字段已經(jing)修改完成
我(wo)們主要(yao)看一(yi)下SendPropertyChanging和SendPropertyChanged
1 protected virtual void SendPropertyChanging() 2 { 3 if ((this.PropertyChanging != null)) 4 { 5 this.PropertyChanging(this, emptyChangingEventArgs); 6 } 7 } 8 9 protected virtual void SendPropertyChanged(String propertyName) 10 { 11 if ((this.PropertyChanged != null)) 12 { 13 this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 14 } 15 }
這(zhe)兩(liang)(liang)個(ge)方法是(shi)(shi)派(pai)生(sheng)自INotifyPropertyChanging和(he)(he)INotifyPropertyChanged這(zhe)兩(liang)(liang)個(ge)接(jie)口的,主要作用是(shi)(shi)通知客戶端某個(ge)屬(shu)性將要被修改(gai)和(he)(he)已經被修改(gai),在這(zhe)兩(liang)(liang)個(ge)
方法體中,事(shi)(shi)實上(shang)是(shi)實現了觸以下兩個(ge)事(shi)(shi)件的作用
1 public event PropertyChangingEventHandler PropertyChanging; 2 3 public event PropertyChangedEventHandler PropertyChanged;
也就是說(shuo),只要屬性(xing)被修改(gai),那(nei)么這兩個事實將被觸發,那(nei)linqtosql為我們提供(gong)這個功能有什么作用呢?請看下回。