中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

從微(wei)軟(ruan)的DBML文件(jian)中我(wo)們能學到(dao)什么(me)(它告(gao)訴了(le)我(wo)們什么(me)是微(wei)軟(ruan)的重(zhong)中之重(zhong))~二 DBContext實例中,表實體對象是怎么(me)被加入的

一 DBContext的構造方法,方法的重載

二 DBContext實例中,表實體對象是怎么被加入的

三 分部類是否破壞了單一職責

四 分部方法從另一方面定義了類型的操作規范

五 LINQ實體類中對屬性的賦值,變化前與變化后SendPropertyChanging與SendPropertyChanged

六 LINQTOSQL中為我們觸發了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么

七 為DBContext對象應該作為其它實體操作類型的基類,并為它提供統一的提交動作

 

 

這個系(xi)列的主角將(jiang)一直(zhi)是(shi)linqtosql.dbml,我們(men)一般叫它數據(ju)對(dui)象(xiang)關系(xi)映射(she),或者稱為(wei)ORM,簡單說(shuo)就(jiu)(jiu)是(shi)數據(ju)庫與對(dui)象(xiang)之(zhi)間(jian)作一個關系(xi),這種關系(xi)我們(men)稱為(wei)Mapping,在LinqToSQL中(zhong),我們(men)直(zhi)接(jie)(jie)將(jiang)某個數據(ju)庫對(dui)象(xiang)托到DBML文件中(zhong),這種關系(xi)映射(she)就(jiu)(jiu)形(xing)成了,也(ye)就(jiu)(jiu)是(shi)說(shuo),以(yi)后想操(cao)作數據(ju)庫直(zhi)接(jie)(jie)操(cao)作DBML中(zhong)的實體類型(xing)就(jiu)(jiu)可以(yi)了。

我們在使(shi)用(yong)某種ORM工具時,總有一個(ge)習慣,那就是(shi)將需要(yao)抽(chou)(chou)象(xiang)(xiang)的(de)東(dong)西(xi)進行(xing)抽(chou)(chou)象(xiang)(xiang),因(yin)為(wei)在管(guan)理起來比較方便,結構(gou)上也更符合面向對(dui)象(xiang)(xiang),對(dui)面LinqToSQL的(de)實(shi)體(ti)類,我們是(shi)否(fou)應該把它進行(xing)一個(ge)抽(chou)(chou)象(xiang)(xiang)?其實(shi),微(wei)軟(ruan)在設計LinqToSQL實(shi)體(ti)類時已經(jing)把答案告(gao)訴了我們,那就是(shi)“要(yao),必須要(yao)”,從實(shi)體(ti)類型用(yong)partial修飾符就可(ke)(ke)以看出,微(wei)軟(ruan)很(hen)希望(wang)我們把它重新(xin)進行(xing)一行(xing)抽(chou)(chou)象(xiang)(xiang),將自己項(xiang)目(mu)需要(yao)的(de)東(dong)西(xi)加入(ru)到實(shi)體(ti)類中(zhong)(zhong),在項(xiang)目(mu)中(zhong)(zhong),代(dai)碼(ma)可(ke)(ke)能是(shi)這樣(yang):

 1    /// <summary>
 2    /// 用戶(hu)實體

 4   /// </summary>
 5    public partial class UserBases : EntityBase
 6    {
 7        /// <summary>
 8        /// 統一(yi)主鍵(jian)
 9        /// </summary>
10        protected override object[] PrimaryKey
11        {
12            get { return new object[] { this.UserID }; }
13        }
14 
15        /// <summary>
16        /// 字段(duan)變(bian)化
17        /// </summary>
18        public override void OnPropertyChange()
19        {
20            if (this.IsValid)//實(shi)體是否驗證通過
21 
22 {
23                base.OnLoaded();
24                this.PropertyChanged += new PropertyChangedEventHandler(base.PropertyChangedEvent);
25            }
26        }
27     }

 

在UserBases實體中由于它繼承了EntityBase這個統一的實體抽象類,所以,在DATA層作統一實體GURD操作時,方法參數和返回值可以寫成這樣:

1 protected virtual IQueryable<EntityBase> GetEntities<TEntity>(Expression<Func<TEntity, bool>> queryFunc) where TEntity : EntityBase
2 {
3 }

 

 
對于實體的抽象,不僅是LinqToSQL,對于其實的架構也同樣適用。
 
posted @ 2012-03-26 23:26  張占嶺  閱讀(1657)  評論(0)    收藏  舉報