ObjectDataSourceDisposingEventArgs.ObjectInstance Свойство

Определение

Возвращает объект, представляющий бизнес-объект, совместно с которым элемент управления ObjectDataSource выполняет операции с данными.Gets an object that represents the business object with which the ObjectDataSource control performs data operations.

public:
 property System::Object ^ ObjectInstance { System::Object ^ get(); };
public object ObjectInstance { get; }
member this.ObjectInstance : obj
Public ReadOnly Property ObjectInstance As Object

Значение свойства

Бизнес-объект, который используется элементом управления ObjectDataSource для выполнения операций с данными; в противном случае —null, если значение null передается элементу управления ObjectDataSourceEventArgs.The business object the ObjectDataSource uses to data operations; otherwise, null, if null is passed to the ObjectDataSourceEventArgs.

Примеры

В следующем примере кода показано, как использовать ObjectDataSource элемент управления с бизнес-объектом GridView и элементом управления для отображения информации.The following code example demonstrates how to use an ObjectDataSource control with a business object and a GridView control to display information. Для создания каждой операции с данными, выполняемой веб-страницей, можно работать с бизнес-объектом, который является очень ресурсоемким (с точки зрения времени или ресурсов).You might work with a business object that is very expensive (in terms of time or resources) to create for every data operation that your Web page performs. Одним из способов работы с дорогостоящим объектом может быть создание его экземпляра один раз, а затем кэширование для последующих операций, а не создание и уничтожение для каждой операции с данными.One way to work with an expensive object might be to create an instance of it once, and then cache it for subsequent operations instead of creating and destroying it for every data operation. В этом примере демонстрируется этот шаблон.This example demonstrates this pattern. Можно выполнить обработку ObjectCreating события, чтобы сначала проверить кэш для объекта, а затем создать экземпляр, только если он еще не кэширован.You can handle the ObjectCreating event to check the cache for an object first, and then create an instance, only if one is not already cached. Затем обработайте ObjectDisposing событие для кэширования бизнес-объекта для будущего использования вместо его уничтожения.Then, handle the ObjectDisposing event to cache the business object for future use, instead of destroying it. В CancelEventArgs.Cancel этом примере свойству true ObjectDataSourceDisposingEventArgs класса присваивается значение, чтобы направить ObjectDataSource невызов Dispose в экземпляре.In this example, the CancelEventArgs.Cancel property of the ObjectDataSourceDisposingEventArgs class is set to true, to direct the ObjectDataSource to not call Dispose on the instance.

<%@ 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>
<%@ Import namespace="Samples.AspNet.VB" %>
<%@ Page language="vb" %>
<!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.
Sub GetEmployeeLogic(sender As Object, e As ObjectDataSourceEventArgs)

    ' First check to see if an instance of this object already exists in the Cache.
    Dim cachedLogic As EmployeeLogic 
    
    cachedLogic = CType( Cache("ExpensiveEmployeeLogicObject"), EmployeeLogic)
    
    If (cachedLogic Is Nothing) Then
            cachedLogic = New EmployeeLogic            
    End If
        
    e.ObjectInstance = cachedLogic
    
End Sub ' GetEmployeeLogic

Sub ReturnEmployeeLogic(sender As Object, e As ObjectDataSourceDisposingEventArgs)
    
    ' Get the instance of the business object that the ObjectDataSource is working with.
    Dim cachedLogic  As EmployeeLogic  
    cachedLogic = CType( e.ObjectInstance, EmployeeLogic)
    
    ' Test to determine whether the object already exists in the cache.
    Dim temp As EmployeeLogic 
    temp = CType( Cache("ExpensiveEmployeeLogicObject"), EmployeeLogic)
    
    If (temp Is Nothing) Then
        ' If it does not yet exist in the Cache, add it.
        Cache.Insert("ExpensiveEmployeeLogicObject", cachedLogic)
    End If
    
    ' Cancel the event, so that the object will 
    ' not be Disposed if it implements IDisposable.
    e.Cancel = True
End Sub ' ReturnEmployeeLogic
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - VB 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.VB.EmployeeLogic"
          onobjectcreating="GetEmployeeLogic"
          onobjectdisposing="ReturnEmployeeLogic" >
        </asp:objectdatasource>        

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

Комментарии

Если методы операции с данными (SelectMethod DeleteMethod, UpdateMethod, и InsertMethod) являются методами экземпляра, то перед выполнением метода создается экземпляр бизнес-объекта.If the data operation methods (SelectMethod, UpdateMethod, DeleteMethod, and InsertMethod) are instance methods, an instance of the business object is created before the method is executed. Можно предотвратить создание бизнес-объекта для каждого вызова, сохранив объект в ObjectInstance свойстве ObjectDisposing в обработчике событий.You can prevent the business object from being created for each call by saving the object in the ObjectInstance property in the ObjectDisposing event handler. В последующих ObjectCreating событиях можно получить бизнес-объект ObjectInstance из свойства.In subsequent ObjectCreating events, you can retrieve the business object from the ObjectInstance property.

Применяется к

Дополнительно