ObjectDataSource.ObjectCreating Evento

Definición

Aparece antes de crear el objeto identificado por la propiedad TypeName.

C#
public event System.Web.UI.WebControls.ObjectDataSourceObjectEventHandler ObjectCreating;

Tipo de evento

Ejemplos

Esta sección contiene dos ejemplos de código. En el primer ejemplo de código se muestra cómo usar un ObjectDataSource objeto con un objeto de negocio y un GridView control para mostrar información. En el segundo ejemplo de código se proporciona el objeto de negocio de nivel intermedio que se usa en el primer ejemplo de código.

En el ejemplo de código siguiente se muestra cómo usar un ObjectDataSource control con un objeto de negocio y un GridView control para mostrar información. Es posible que trabaje con un objeto de negocio que sea muy caro de crear (en términos de tiempo o recursos) para cada operación de datos que realice la página web. Una manera de trabajar con un objeto costoso podría ser crear una instancia de ella una vez y, a continuación, almacenarla en caché para las operaciones posteriores en lugar de crearla y destruirla para cada operación de datos.

Nota

En una aplicación de producción, es posible que varias solicitudes terminen simultáneamente con la misma instancia. Por lo tanto, el objeto debe implementarse de forma segura para subprocesos.

En este ejemplo de código se muestra este patrón. Puede controlar el ObjectCreating evento para comprobar primero la memoria caché de un objeto y crear solo una instancia del objeto, si aún no está almacenada en caché. A continuación, controle el ObjectDisposing evento para almacenar en caché el objeto de negocio para su uso futuro, en lugar de destruirlo. En este ejemplo de código, la CancelEventArgs.Cancel propiedad del ObjectDataSourceDisposingEventArgs objeto se establece true en para dirigir el ObjectDataSource método para que no llame Dispose al método en el objeto .

ASP.NET (C#)
<%@ Import namespace="Samples.AspNet.CS" %>
<%@ Page language="c#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

// Instead of creating and destroying the business object each time, the 
// business object is cached in the ASP.NET Cache.
private void GetEmployeeLogic(object sender, ObjectDataSourceEventArgs e)
{
    // First check to see if an instance of this object already exists in the Cache.
    EmployeeLogic cachedLogic;
    
    cachedLogic = Cache["ExpensiveEmployeeLogicObject"] as EmployeeLogic;
    
    if (null == cachedLogic) {
            cachedLogic = new EmployeeLogic();            
    }
        
    e.ObjectInstance = cachedLogic;     
}

private void ReturnEmployeeLogic(object sender, ObjectDataSourceDisposingEventArgs e)
{    
    // Get the instance of the business object that the ObjectDataSource is working with.
    EmployeeLogic cachedLogic = e.ObjectInstance as EmployeeLogic;        
    
    // Test to determine whether the object already exists in the cache.
    EmployeeLogic temp = Cache["ExpensiveEmployeeLogicObject"] as EmployeeLogic;
    
    if (null == temp) {
        // If it does not yet exist in the Cache, add it.
        Cache.Insert("ExpensiveEmployeeLogicObject", cachedLogic);
    }
    
    // Cancel the event, so that the object will 
    // not be Disposed if it implements IDisposable.
    e.Cancel = true;
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - C# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <asp:gridview
          id="GridView1"
          runat="server"          
          datasourceid="ObjectDataSource1">
        </asp:gridview>

        <asp:objectdatasource 
          id="ObjectDataSource1"
          runat="server"          
          selectmethod="GetCreateTime"          
          typename="Samples.AspNet.CS.EmployeeLogic"
          onobjectcreating="GetEmployeeLogic"
          onobjectdisposing="ReturnEmployeeLogic" >
        </asp:objectdatasource>        

    </form>
  </body>
</html>

En el ejemplo de código siguiente se proporciona el objeto de negocio de nivel intermedio de ejemplo que usa el ejemplo de código anterior. El ejemplo de código consta de un objeto de negocio básico, definido por la EmployeeLogic clase , que es una clase con estado que encapsula la lógica de negocios. Para obtener un ejemplo de trabajo completo, debe compilar este código como una biblioteca y usar estas clases desde una página de ASP.NET (archivo .aspx).

C#
namespace Samples.AspNet.CS {

using System;
using System.Collections;
using System.Web.UI;
using System.Web.UI.WebControls;
  //
  // EmployeeLogic is a stateless business object that encapsulates
  // the operations you can perform on a NorthwindEmployee object.
  //
  public class EmployeeLogic {

    public EmployeeLogic () : this(DateTime.Now) {        
    }
    
    public EmployeeLogic (DateTime creationTime) { 
        _creationTime = creationTime;
    }

    private DateTime _creationTime;
    
    // Returns a collection of NorthwindEmployee objects.
    public ICollection GetCreateTime () {
      ArrayList al = new ArrayList();
      
      // Returns creation time for this example.      
      al.Add("The business object that you are using was created at " + _creationTime);
      
      return al;
    }
  }
}

Comentarios

Si el método que se identifica para realizar la operación de datos es static (Shared en Visual Basic), los ObjectCreating eventos y ObjectCreated nunca se generan.

El ObjectDataSource control llama automáticamente al constructor sin parámetros de un objeto de negocio para crear una instancia de él mediante reflexión. Controle el ObjectCreating evento para llamar explícitamente a otro constructor y establezca la instancia del objeto que da como resultado la ObjectInstance propiedad del objeto asociado ObjectDataSourceEventArgs .

Para obtener más información acerca de cómo controlar eventos, vea controlar y provocar eventos.

Se aplica a

Produto Versións
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Consulte también