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