從微軟的DBML文件中我們能學(xué)到什么(它告訴了我們什么是微軟的重中之重)~五 LINQ實(shí)體類中對屬性的賦值,變化前與變化后SendPropertyChanging與SendPropertyChanged
首先從這一篇的文章標(biāo)題中可以看出,主要是講dbml中對實(shí)體的屬性賦值的相關(guān)知識,還有SendPropertyChanging與SendPropertyChanged這兩個(gè)方法,從第五講和第六講中我們看到標(biāo)題有些雷同,是的,但我講它們的側(cè)重點(diǎn)不同,第五講主要講實(shí)體中屬性賦值的過程,此時(shí)會用到SendPropertyChanging與SendPropertyChanged這兩個(gè)方法,而第六講,主要是講這兩個(gè)方法的作用,先透露一下,主要講事件觸發(fā)機(jī)制的,呵呵。
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 }
這是一種其中的dbml實(shí)體類中的代碼片段,它主要是為ExceptionID這個(gè)屬性賦值,get部分沒什么說的,已經(jīng)返回這個(gè)_ExceptionID字段的值,主要看set部分,它的工作流程是:
1 判斷_ExceptionID變量是否等于原來的值
2 如果不等,調(diào)用OnExceptionIDChanging方法,表示開始修改這字段,它是一個(gè)分部方法,可以由開發(fā)人員根據(jù)自己的邏輯去實(shí)現(xiàn)它
3 調(diào)用屬性將要被修改方法SendPropertyChanging
4 對字段進(jìn)行賦值
5 調(diào)用屬性已經(jīng)被修改方法SendPropertyChanged,并告訴方法修改的字段為“ExceptionID”
6 OnExceptionIDChanged,表示這個(gè)字段已經(jīng)修改完成
我們主要看一下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 }
這兩個(gè)方法是派生自INotifyPropertyChanging和INotifyPropertyChanged這兩個(gè)接口的,主要作用是通知客戶端某個(gè)屬性將要被修改和已經(jīng)被修改,在這兩個(gè)
方法體中,事實(shí)上是實(shí)現(xiàn)了觸以下兩個(gè)事件的作用
1 public event PropertyChangingEventHandler PropertyChanging; 2 3 public event PropertyChangedEventHandler PropertyChanged;
也就是說,只要屬性被修改,那么這兩個(gè)事實(shí)將被觸發(fā),那linqtosql為我們提供這個(gè)功能有什么作用呢?請看下回。
浙公網(wǎng)安備 33010602011771號