El objeto ObjectDataSource es un control de origen de datos de ASP.NET que representa un objeto de nivel medio orientado a datos o un objeto de interfaz de datos con controles enlazados a datos. Puede usar el control ObjectDataSource junto con un control enlazado a datos para presentar, editar y ordenar datos de una página Web que contenga poco código o no lo contenga.
Nota: |
|---|
| Si no está familiarizado con las características de acceso a datos en ASP.NET 2.0, debe leer alguno de estos temas antes de continuar: |
Una práctica de diseño de aplicaciones bastante habitual consiste en separar la capa de presentación de la lógica empresarial y encapsular ésta en objetos comerciales. Estos objetos comerciales forman una capa aparte entre la capa de presentación y el nivel de datos, lo que produce una arquitectura de aplicación de tres niveles. El control ObjectDataSource permite a los desarrolladores utilizar un control de origen de datos de ASP.NET y a la vez retener su arquitectura de aplicación de tres niveles.
El control ObjectDataSource utiliza la reflexión para crear instancias de objetos comerciales y para llamar a los métodos que contienen para recuperar, actualizar, insertar y eliminar datos. La propiedad TypeName identifica el nombre de la clase con la que trabaja ObjectDataSource. El control ObjectDataSource crea y destruye una instancia de la clase por cada llamada a un método; no mantiene el objeto en la memoria durante el periodo de duración de la solicitud Web. Esto supone una consideración importante si el objeto comercial que se utiliza requiere muchos recursos o si resulta, por otra parte, caro de crear y destruir. Puede que el uso de un objeto caro no sea la mejor opción de diseño, pero permite controlar la duración del objeto por medio de los eventos ObjectCreating, ObjectCreated y ObjectDisposing.
Nota: |
|---|
| Los métodos identificados por las propiedades SelectMethod, UpdateMethod, InsertMethod y DeleteMethod pueden ser métodos de instancia o métodos static (Shared en Visual Basic). Si los métodos son static (Shared en Visual Basic), no se crea una instancia del objeto comercial ni se provocan los eventos ObjectCreating, ObjectCreated y ObjectDisposing. |
Para recuperar los datos de un objeto comercial, establezca la propiedad SelectMethod con el nombre del método que recupera los datos. Si el método no devuelve un objeto IEnumerable o DataSet, el motor en tiempo de ejecución incluye el objeto en una colección IEnumerable. Si la firma del método tiene parámetros, puede agregar objetos Parameter a la colección SelectParameters y después enlazarlos a los valores que desee pasar al método que especifica la propiedad SelectMethod. Para que ObjectDataSource utilice los parámetros, éstos deben coincidir con los nombres y tipos de los parámetros de la firma del método.
El control ObjectDataSource recupera los datos cada vez que se llama al método Select. Este método proporciona el acceso mediante programación al método especificado por la propiedad.SelectMethod. Los controles enlazados a ObjectDataSource llaman automáticamente al método especificado por la propiedad SelectMethod cuando se llama a su método DataBind. Si establece la propiedad DataSourceID de un control enlazado a datos, el control se enlaza automáticamente a los datos del origen de datos, según sea necesario. El método recomendado para enlazar un control ObjectDataSource a un control enlazado a datos consiste en establecer la propiedad DataSourceID. Como alternativa, puede establecer la propiedad DataSource, pero entonces debe llamar explícitamente al método DataBind del control enlazado a datos. Para recuperar los datos puede llamar al método Select mediante programación en cualquier momento.
Para obtener más información acerca de cómo enlazar controles enlazados a datos a controles de origen de datos, vea Establecer enlaces a datos utilizando un control de origen de datos.
Dependiendo de las funciones del objeto comercial con el que trabaje el control ObjectDataSource, puede realizar operaciones de datos tales como la actualización, inserción y eliminación. Para realizar estas operaciones, establezca el nombre de método adecuado y cualquier parámetro asociado para la operación que desee realizar. Por ejemplo, para una operación de actualización, establezca la propiedad UpdateMethod en el nombre del método de objeto comercial que efectué actualizaciones y agregue los parámetros necesarios a la colección UpdateParameters. Si el control ObjectDataSource se asocia a un control enlazado a datos, este control agrega los parámetros. En este caso, debe garantizar que los nombres de los parámetros del método coincidan con los nombres de los campos del control enlazado a datos. La actualización se realiza cuando se llama al método Update, ya sea de manera explícita mediante código o automática mediante un control enlazado a datos. Se sigue el mismo modelo general para las operaciones Delete y Insert. Se supone que los objetos comerciales realizan las operaciones de datos de este tipo de registro en registro, en lugar de hacerlo por lotes.
El control ObjectDataSource puede filtrar los datos recuperados por la propiedad SelectMethod, si los datos se devuelven como un objeto DataSet o DataTable. El control ObjectDataSource permite almacenar en memoria caché datos de todos los tipos, aunque no es conveniente almacenar en caché aquellos objetos que conservan recursos o estados que no pueden compartirse para atender varias solicitudes (por ejemplo, un objeto SqlDataReader abierto), puesto que esta misma instancia del objeto se utilizará para atender varias solicitudes. Puede establecer la propiedad FilterExpression en una expresión de filtrado, utilizando una sintaxis de cadena de formato y enlazando los valores de la expresión a parámetros especificados en la colección FilterParameters.
Aunque ObjectDataSource no conserva la instancia del objeto comercial entre varias solicitudes, puede almacenar en memoria caché el resultado de la propiedad SelectMethod. Mientras los datos estén almacenados en caché, las llamadas posteriores al método Select devolverán los datos de la caché, en lugar de crear el objeto comercial y llamar a su propiedad SelectMethod mediante reflexión. El almacenamiento en caché permite evitar crear el objeto y llamar a su método de datos a expensas de la memoria del servidor Web. El objeto ObjectDataSource almacena automáticamente los datos en memoria caché cuando la propiedad EnableCaching está establecida en true y la propiedad CacheDuration está establecida en el número de segundos durante los cuales la memoria caché almacena datos antes de descartarse la caché. También puede especificar una propiedad CacheExpirationPolicy y una propiedad SqlCacheDependency opcional.
En la tabla siguiente se describen las características del control ObjectDataSource.
| Función | Requisitos |
| Selección | Establezca la propiedad SelectMethod en el nombre del método de objeto comercial que selecciona los datos e incluya todos los parámetros necesarios en la colección SelectParameters, ya sea mediante programación o con un control enlazado a datos. |
| Ordenación | Establezca la propiedad SortParameterName en el nombre del parámetro del método SelectMethod que lleva los criterios de ordenación. |
| Filtrado | Establezca la propiedad FilterExpression en una expresión de filtrado y, de forma opcional, agregue los parámetros necesarios a la colección FilterParameters para filtrar los datos cuando se llame al método Select. El método especificado por la propiedad SelectMethod debe devolver DataSet o DataTable. |
| Paginación | Se admite la paginación del origen de datos si el método SelectMethod contiene los parámetros del número máximo de registros que se recuperan y el índice del primer registro a recuperar. Los nombres de estos parámetros deben establecerse en las propiedades MaximumRowsParameterName y StartRowIndexParameterName respectivamente. Un control enlazado a datos podría realizar la paginación por sí mismo, incluso si el control ObjectDataSource no admite la paginación directamente en el método especificado por la propiedad SelectMethod. Para que el control enlazado a datos pueda hacerlo, se requiere que el método especificado por la propiedad SelectMethod devuelva un objeto que implemente la interfaz Icollection. |
| Actualización | Establezca la propiedad UpdateMethod en el nombre del método de objeto comercial que actualiza los datos e incluya todos los parámetros necesarios en la colección UpdateParameters. |
| Eliminación | Establezca la propiedad DeleteMethod en el nombre del método de objeto comercial o la función que elimina los datos e incluya todos los parámetros necesarios en la colección DeleteParameters. |
| Inserción | Establezca la propiedad InsertMethod en el nombre del método de objeto comercial o la función que inserta los datos e incluya todos los parámetros necesarios en la colección InsertParameters. |
| Almacenamiento en caché | Establezca la propiedad EnableCaching en true y las propiedades CacheDuration y CacheExpirationPolicy según el comportamiento del almacenamiento en caché que desee para los datos almacenados en memoria caché. |
Como todos los controles de origen de datos, el control ObjectDataSource se asocia a una clase de vista de origen de datos. Aunque el control ObjectDataSource es la interfaz que usa el desarrollador de páginas para trabajar con los datos, la clase ObjectDataSourceView es la interfaz con la que trabajan los controles enlazados a datos. Además, la clase ObjectDataSourceView describe las funciones del control de origen de datos y realiza el trabajo concreto. El control ObjectDataSource sólo tiene un objeto ObjectDataSourceView asociado y siempre se denomina DefaultView. Aunque el método GetView expone el objeto ObjectDataSourceView, muchos de sus métodos y propiedades están contenidos en el control ObjectDataSource y son expuestos directamente por él. En segundo plano, el objeto ObjectDataSourceView realiza todas las operaciones de datos, incluidas recuperar, insertar, actualizar, eliminar, filtrar y ordenar los datos. Para obtener más información, vea ObjectDataSourceView.
No se produce una representación visual del control ObjectDataSource; se implementa como un control para permitir crearlo de forma declarativa y, de forma opcional, permitir que participe en la administración de estados. Como resultado, ObjectDataSource no admite características visuales como las propiedades EnableTheming o SkinID.