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

從微(wei)軟的(de)DBML文(wen)件中我們能學(xue)到什么(它告(gao)訴了我們什么是微(wei)軟的(de)重(zhong)中之重(zhong))~四 分部(bu)方(fang)法從另一方(fang)面定義了類型的(de)操作規范

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

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

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

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

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

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

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

 

 

分部方法,partial method,它要求必須定義在分部類里,上一文章已(yi)經說過分部類,相(xiang)信(xin)各位(wei)已(yi)經以它有了一個認(ren)識了,今天主(zhu)要(yao)說分部方(fang)法,分部方(fang)法主(zhu)要(yao)是(shi)為(wei)了以后有可能要(yao)實現某個功能,而為(wei)這個功能定義(yi)的方(fang)法,這在(zai)linq to sql的DBML文件中表現的很突出,看代碼:

public partial class Category : INotifyPropertyChanging, INotifyPropertyChanged
    {

        private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

        private int _ID;

        private string _Name;

        private int _ParentID;

        #region 可擴展性方法定義
        partial void OnLoaded();
        partial void OnValidate(System.Data.Linq.ChangeAction action);
        partial void OnCreated();
        partial void OnIDChanging(int value);
        partial void OnIDChanged();
        partial void OnNameChanging(string value);
        partial void OnNameChanged();
        partial void OnParentIDChanging(int value);
        partial void OnParentIDChanged();
        #endregion
    public Category()
       {
           OnCreated();
       }
}
我們看到微軟為一個linq實體添加自動添加了幾個分部方法,但并沒有去實現它,在我們開始程序時,可以在它進行實現,但會引用一些方法,如OnCreated方法,而我們在Category 分部類
中可(ke)以為OnCreated方(fang)法(fa)進行實(shi)(shi)現,從(cong)而達到(dao)當建立實(shi)(shi)體實(shi)(shi)例(li)時,執(zhi)行我們的代碼。

分部方法從另一方面定義了類(lei)型(xing)的操作規范,這句話是(shi)(shi)今天的主題,從上(shang)面的代碼中可以看到,事實也是(shi)(shi)這樣,分部方法標(biao)注了類(lei)可以包括的行(xing)為,并把這些行(xing)為進(jin)行(xing)調用,而行(xing)為主體(ti)可以由開(kai)發者自己(ji)去確定,怎么樣(yang),很靈活吧!

看一下在我的項目中是如何使用分部方法的,它實現了每次實例化對象時,自動執行方法體里的代碼的功能,本代碼段的功能是為實體訂閱一個列修改的事件。
public class UserBases_Ext : UserBases { }
    public partial class UserBases : EntityBase
    {
        protected override object[] PrimaryKey
        {
            get { return new object[] { this.UserID }; }
        }

        /// <summary>
        /// 實體(ti)初始(shi)化時自(zi)動執行(xing),在linqtosql的源(yuan)文件里有定義
/// </summary>
        partial void OnLoaded()
        {
            if (this.IsValid)//實(shi)體是否驗證通(tong)過            {
                base.Initialization();//基類的某(mou)些屬性初始化
this.PropertyChanged += new PropertyChangedEventHandler(base.PropertyChangedEvent);//初(chu)始實體時,先(xian)訂閱(yue)列修改(gai)的(de)事件(jian)
}
        }

posted @ 2012-03-27 17:27  張占嶺  閱讀(936)  評論(0)    收藏  舉報