从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~四 分部方法从另一方面定义了类型的操作规范

一 DBContext的构造方法,方法的重载

二 DBContext实例中,表实体对象是怎么被加入的

三 分部类是否破坏了单一职责

四 分部方法从另一方面定义了类型的操作规范

五 LINQ实体类中对属性的赋值,变化前与变化后SendPropertyChanging与SendPropertyChanged

六 LINQTOSQL中为我们触发了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么

七 为DBContext对象应该作为其它实体操作类型的基类,并为它提供统一的提交动作

 

 

分部方法,partial method,它要求必须定义在分部类里,上一文章已经说过分部类,相信各位已经以它有了一个认识了,今天主要说分部方法,分部方法主要是为了以后有可能要实现某个功能,而为这个功能定义的方法,这在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 分部类
中可以为OnCreated方法进行实现,从而达到当建立实体实例时,执行我们的代码。

分部方法从另一方面定义了类型的操作规范,这句话是今天的主题,从上面的代码中可以看到,事实也是这样,分部方法标注了类可以包括的行为,并把这些行为进行调用,而行为主体可以由开发者自己去确定,怎么样,很灵活吧!

看一下在我的项目中是如何使用分部方法的,它实现了每次实例化对象时,自动执行方法体里的代码的功能,本代码段的功能是为实体订阅一个列修改的事件。
public class UserBases_Ext : UserBases { }
    public partial class UserBases : EntityBase
    {
        protected override object[] PrimaryKey
        {
            get { return new object[] { this.UserID }; }
        }

        /// <summary>
        /// 实体初始化时自动执行,在linqtosql的源文件里有定义
/// </summary>
        partial void OnLoaded()
        {
            if (this.IsValid)//实体是否验证通过            {
                base.Initialization();//基类的某些属性初始化
this.PropertyChanged += new PropertyChangedEventHandler(base.PropertyChangedEvent);//初始实体时,先订阅列修改的事件
}
        }

posted @ 2012-03-27 17:27  张占岭  阅读(922)  评论(0编辑  收藏  举报