且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~六 LINQTOSQL中为我们触发了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么

更新时间:2022-08-20 23:38:49

一 DBContext的构造方法,方法的重载

二 DBContext实例中,表实体对象是怎么被加入的

三 分部类是否破坏了单一职责

四 分部方法从另一方面定义了类型的操作规范

五 LINQ实体类中对属性的赋值,变化前与变化后SendPropertyChanging与SendPropertyChanged

六 LINQTOSQL中为我们触发了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么

七 为DBContext对象应该作为其它实体操作类型的基类,并为它提供统一的提交动作

接上一篇文章,谈到了当属性被修改时,LINQ会帮助我们触发两个事件,它们是:

public event PropertyChangingEventHandler PropertyChanging;

   public event PropertyChangedEventHandler PropertyChanged;
那它在实际的项目中是怎么去用的呢,下面我用最近我写的一个项目来说一下它的用途:
实现功能:统一的更新,不使用linq to sql的更新,而使用T-SQL的update
实现思路:需要将要更新的字段和值进行整理,然后再找到要更新的实体真实表名,表主键
核心知识:PropertyChanging和PropertyChanged事件帮助我们收集要更新的字段
专业知识:MetaTable表示对真实数据表的抽象,可以根据实体对象得到真实数据表对象
 
核心代码:
统一抽象基类:
 
具体实体对象,需要人为干预一下:
 
运行过程:当实体为加载后,自动订阅一个PropertyChanged,指向的方法是基类的PropertyChangedEvent,它主要功能是记录要修改的字段和被
修改的值,然后UI层去为新的实体对象赋值,提交到BLL(Service)或者DAL(DATA)(小项目可以不用BLL),去调用底层的统一修改的方法,即可。
 
本项目与其它项目不同的地方在于:把通过项目与实例项目分开
 

以后,直接引用 Entity.Commons项目就可以了,对于不同的项目有不同的Entity,这里Entity就叫实例项目,而如果你要作的项目只有一个数据库,可能是前台后台子模块项目等,那Entity层也可以是公用的,DATA层公用,只要重新设计Service层和UI层就可以了。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~六 LINQTOSQL中为我们触发了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么,如需转载请自行联系原博主。