2012-01-04 80 views
0

我正在閱讀編程實體框架4.0和我在POCO & WCF章節。WCF服務的POCO類 - 代理生成器如何工作/互操作性

生成代理類後,我瞥了一眼生成的代碼:

public partial class StateObject : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged { 

    /* ........... */ 
    [System.Runtime.Serialization.DataMemberAttribute()] 
    public ConsoleApplicationPOCO.POCOCustomerService.State State { 
     get { 
      return this.StateField; 
     } 
     set { 
      if ((this.StateField.Equals(value) != true)) { 
       this.StateField = value; 
       this.RaisePropertyChanged("State"); 
      } 
     } 
    } 

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 

    protected void RaisePropertyChanged(string propertyName) { 
     System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; 
     if ((propertyChanged != null)) { 
      propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); 
     } 
    } 

而一些問題激起我的頭:

  • 如何代碼生成器知道如何實現setter方法,特別是呼叫RaisePropertyChanged方法和如果陳述
  • 如何發電機知道如何im Plement 保護無效RaisePropertyChanged(字符串propertyName)
  • 作者說這個解決方案可以用於不使用.NET的客戶端。怎麼來的,如果我們仍然依靠INotifyPropertyChanged的IExtensibleDataObject

回答

0

1)發電機着眼於由目標類公開的數據成員,並創建了一個getter和setter爲每一個一個屬性。

2)Microsoft決定生成的類將實現System.ComponentModel.INotifyPropertyChanged接口,因此每個生成的setter包含一個調用RaisePropertyChanged以支持此接口。這是需要完整屬性設置器的原因之一。

3)這只是Microsoft的服務客戶端實現。如果您從其他編程IDE添加對該服務的引用,則無法獲得.Net框架特定的生成代碼。 IDE將根據自己的需要生成服務引用代碼。