zoukankan      html  css  js  c++  java
  • 从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~五 LINQ实体类中对属性的赋值,变化前与变化后SendPropertyChanging与SendPropertyChanged

    回到目录

    首先从这一篇的文章标题中可以看出,主要是讲dbml中对实体的属性赋值的相关知识,还有SendPropertyChanging与SendPropertyChanged这两个方法,从第五讲和第六讲中我们看到标题有些雷同,是的,但我讲它们的侧重点不同,第五讲主要讲实体中属性赋值的过程,此时会用到SendPropertyChanging与SendPropertyChanged这两个方法,而第六讲,主要是讲这两个方法的作用,先透露一下,主要讲事件触发机制的,呵呵。

    
    
     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实体类中的代码片段,它主要是为ExceptionID这个属性赋值,get部分没什么说的,已经返回这个_ExceptionID字段的值,主要看set部分,它的工作流程是:

    1 判断_ExceptionID变量是否等于原来的值

    2 如果不等,调用OnExceptionIDChanging方法,表示开始修改这字段,它是一个分部方法,可以由开发人员根据自己的逻辑去实现它

    3 调用属性将要被修改方法SendPropertyChanging

    4 对字段进行赋值

    5 调用属性已经被修改方法SendPropertyChanged,并告诉方法修改的字段为“ExceptionID”

    6 OnExceptionIDChanged,表示这个字段已经修改完成

    我们主要看一下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       }
    
    
    
     

    这两个方法是派生自INotifyPropertyChanging和INotifyPropertyChanged这两个接口的,主要作用是通知客户端某个属性将要被修改和已经被修改,在这两个

    方法体中,事实上是实现了触以下两个事件的作用

    
    
    1    public event PropertyChangingEventHandler PropertyChanging;
    2 
    3    public event PropertyChangedEventHandler PropertyChanged;

    也就是说,只要属性被修改,那么这两个事实将被触发,那linqtosql为我们提供这个功能有什么作用呢?请看下回。

    回到目录

  • 相关阅读:
    LeetCode 205. Isomorphic Strings
    LeetCode 191. Number of 1 Bits
    InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_1' with dtype float and shape [?,10]
    tensorflow环境下安装scikit-learn
    LeetCode 136. Single Number
    LeetCode 70. Climbing Stairs
    TypeError: to_categorical() got an unexpected keyword argument 'nb_classes'
    Window系统 安装TFLearn
    在tensorflow环境下安装matplotlib
    mysql三元运算,上下连表,视图,触发器,存储过程,事务等不常用方法
  • 原文地址:https://www.cnblogs.com/lori/p/2420424.html
Copyright © 2011-2022 走看看