ASP.NET ObjectDataSource 控件表示具有数据检索和更新功能的中间层对象。ObjectDataSource 控件可用作数据绑定控件(如 GridView、FormView 或 DetailsView 控件)的数据接口。可以使用这些控件在 ASP.NET 网页上显示和编辑中间层业务对象中的数据。
一、背景
大多数 ASP.NET 数据源控件,如 SqlDataSource,都在两层应用程序层次结构中使用。在该层次结构中,表示层(ASP.NET 网页)可以与数据层(数据库和 XML 文件等)直接进行通信。但是,常用的应用程序设计原则是,将表示层与业务逻辑相分离,而将业务逻辑封装在业务对象中。这些业务对象在表示层和数据层之间形成一层,从而生成一种三层应用程序结构。ObjectDataSource 控件通过提供一种将相关页上的数据控件绑定到中间层业务对象的方法,为三层结构提供支持。在不使用扩展代码的情况下,ObjectDataSource 使用中间层业务对象以声明方式对数据执行选择、插入、更新、删除、分页、排序、缓存和筛选操作。
ObjectDataSource 控件使用反射调用业务对象的方法,以对数据执行选择、更新、插入和删除操作。设置 ObjectDataSource 控件的 TypeName 属性来指定要用作源对象的类名称。
1.1、排序和分页
通过将请求中的排序和分页信息从 GridView 控件等数据绑定控件传递到要处理的数据对象,ObjectDataSource 控件可以对其他的排序和分页功能提供支持。此后,源数据对象或数据源控件本身可以对数据进行排序,并将数据返回到各页中。
1.2、缓存
ObjectDataSource 控件可以缓存基础业务对象返回的对象。但是,如果对象存放资源或保持不能在多个请求之间共享的状态,则不能缓存该对象,例如,打开的 DataReader 对象就是这样的对象。
1.3、筛选
如果由源数据对象返回到 ObjectDataSource 控件的对象是 DataSet 或 DataTable 对象,则 ObjectDataSource 控件会支持使用 DataColumn 类的 Expression 属性的语法对筛选提供支持。通过筛选,无需使用新的选择条件对数据源进行重新查询,即可只公开与特殊的搜索条件匹配的行。
1.4、冲突检测
通过将 ObjectDataSource 控件的 ConflictDetection 属性设置为 true,可以指定 ObjectDataSource 控件应该包括调用源数据对象的更新方法时的原始值。此后,这些原始值可以包括在开放式并发检查中。
二、ObjectDataSource 类
ObjectDataSource 是 ASP.NET 数据源控件,用于向数据绑定控件表示数据识别中间层对象或数据接口对象。 可以结合使用 ObjectDataSource 控件与数据绑定控件,这样,只用少量代码或不用代码就可以在网页上显示、编辑和排序数据。
一种极为常见的应用程序设计做法是,将表示层与业务逻辑分开,将业务逻辑封装到业务对象中。 这些业务对象在表示层和数据层之间构成一个独特的层,从而得到一个三层应用程序结构。 ObjectDataSource 控件使开发人员能够在保留他们的三层应用程序结构的同时,使用 ASP.NET 数据源控件。
ObjectDataSource 控件使用反射创建业务对象的实例,并调用这些实例的方法以检索、更新、插入和删除数据。 TypeName 属性标识 ObjectDataSource 使用的类的名称。 ObjectDataSource 控件在每次调用方法时都创建并销毁类的实例,它在 Web 请求的生存期内不在内存中保留对象。 如果您使用的业务对象需要很多资源或者在其他方面需要很大开销来创建和销毁,您就需要认真考虑。 使用高开销对象可能并不是最佳设计选择,但是可以使用 ObjectCreating、ObjectCreated 和 ObjectDisposing 事件控制该对象的生命周期。
说明: 由 SelectMethod、UpdateMethod、InsertMethod 和 DeleteMethod 属性标识的方法可以是实例方法或 static(在 Visual Basic 中为 Shared)方法。 如果方法为 static(在 Visual Basic 中为 Shared),则不创建业务对象的实例,也不引发 ObjectCreating、ObjectCreated 和 ObjectDisposing 事件。
若要从业务对象中检索数据,请用检索数据的方法的名称设置 SelectMethod 属性。 如果此方法未返回 IEnumerable 或 DataSet 对象,则运行时在 IEnumerable 集合中包装该对象。 如果方法签名带参数,可以将 Parameter 对象添加到 SelectParameters 集合中,然后将它们绑定到要传递给由 SelectMethod 属性指定的方法的值。 为使 ObjectDataSource 能够使用参数,这些参数必须与方法签名中的参数名称和类型相匹配。
每次调用 Select 方法时,ObjectDataSource 控件都检索数据。 此方法提供对 SelectMethod 属性所指定的方法的编程访问。 当调用绑定到 ObjectDataSource 的控件的 DataBind 方法时,这些控件自动调用 SelectMethod