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

一 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表示对真实数据表的抽象,可以根据实体对象得到真实数据表对象
 
核心代码:
统一抽象基类:
image 
具体实体对象,需要人为干预一下:
image 
运行过程:当实体为加载后,自动订阅一个PropertyChanged,指向的方法是基类的PropertyChangedEvent,它主要功能是记录要修改的字段和被
修改的值,然后UI层去为新的实体对象赋值,提交到BLL(Service)或者DAL(DATA)(小项目可以不用BLL),去调用底层的统一修改的方法,即可。
 
本项目与其它项目不同的地方在于:把通过项目与实例项目分开
image 
以后,直接引用 Entity.Commons项目就可以了,对于不同的项目有不同的Entity,这里Entity就叫实例项目,而如果你要作的项目只有一个数据库,可能是前台后台子模块项目等,那Entity层也可以是公用的,DATA层公用,只要重新设计Service层和UI层就可以了。
 
posted @ 2012-03-27 23:45  张占岭  阅读(1037)  评论(0编辑  收藏  举报