具有WCF服务的POCO类 - 代理生成器如何工作/互操作性

时间:2012-01-04 22:56:13

标签: .net wcf entity-framework entity-framework-4 poco

我正在阅读编程实体框架4.0 ,而我正在阅读POCO& WCF章节。

在生成代理类之后,我瞥见了生成的代码:

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 方法和 if 语句
  • 生成器如何知道如何实现 protected void RaisePropertyChanged(string propertyName)
  • 作者说这个解决方案可以用于不使用.NET的客户端。如果我们依然依赖 INotifyPropertyChanged IExtensibleDataObject

1 个答案:

答案 0 :(得分:0)

1)生成器查看目标类公开的DataMembers,并为每个属性创建一个带有getter和setter的属性。

2)Microsoft决定生成的类将实现System.ComponentModel.INotifyPropertyChanged接口,因此每个生成的setter都包含对RaisePropertyChanged的调用以支持此接口。这是需要完整属性设置器的部分原因。

3)这只是微软服务的客户端实现。如果从其他编程IDE添加对服务的引用,则不会获得.Net框架特定的生成代码。该IDE将根据自己的需要生成服务引用代码。