從微軟的(de)DBML文件中(zhong)我們能學到什么(me)(它告訴了(le)我們什么(me)是微軟的(de)重中(zhong)之重)~六 LINQTOSQL中(zhong)為我們觸發了(le)SendPropertyChanging和SendPropertyChanged,它的(de)真正用(yong)意是什么(me)
五 LINQ實體類中對屬性的賦值,變化前與變化后SendPropertyChanging與SendPropertyChanged
六 LINQTOSQL中為我們觸發了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么
七 為DBContext對象應該作為其它實體操作類型的基類,并為它提供統一的提交動作
接上(shang)一篇文章,談到了當(dang)屬性被修改時(shi),LINQ會幫助我們觸發兩個(ge)事件(jian),它們是:
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層就可以了。