2012-01-04 81 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将根据自己的需要生成服务引用代码。