从微软的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为我们提供这个功能有什么作用呢?请看下回。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~五 LINQ实体类中对属性的赋值,变化前与变化后SendPropertyChanging与SendPropertyChanged,如需转载请自行联系原博主。

目录
相关文章
|
XML 监控 中间件
SAP 产品线中写法很接近,容易混淆的几个名称
SAP 产品线中写法很接近,容易混淆的几个名称
|
存储 安全 数据库
如何手动通过增强的方式,给 SAP ABAP 数据库表增添新的字段试读版
如何手动通过增强的方式,给 SAP ABAP 数据库表增添新的字段试读版
|
存储 NoSQL Unix
基于C#的ArcEngine二次开发50:MDB创建新要素类及“无当前记录”异常处理
基于C#的ArcEngine二次开发50:MDB创建新要素类及“无当前记录”异常处理
基于C#的ArcEngine二次开发50:MDB创建新要素类及“无当前记录”异常处理
QtApplets-自定义控件-6-属性研究(未成功)
QtApplets-自定义控件-6-属性研究(未成功)
143 0
QtApplets-自定义控件-6-属性研究(未成功)
一种在标准的SAP UI5方法里注入新逻辑的办法
一种在标准的SAP UI5方法里注入新逻辑的办法
一种在标准的SAP UI5方法里注入新逻辑的办法
【自然框架】内部类库、控件的引用关系(最新整理,基本稳定)
  和以前相比,减少了一个项目,把Control_Interface合并到CommonFunction里面。这样引用关系就简单多了。   基本上分为三个层次:类库、自定义控件、页面基类。其中的 MetaData 负责元数据的定义和加载。
644 0