ObjectDataSource.ObjectCreating Olay

Tanım

özelliği tarafından TypeName tanımlanan nesne oluşturulmadan önce gerçekleşir.

public:
 event System::Web::UI::WebControls::ObjectDataSourceObjectEventHandler ^ ObjectCreating;
public event System.Web.UI.WebControls.ObjectDataSourceObjectEventHandler ObjectCreating;
member this.ObjectCreating : System.Web.UI.WebControls.ObjectDataSourceObjectEventHandler 
Public Custom Event ObjectCreating As ObjectDataSourceObjectEventHandler 

Olay Türü

Örnekler

Bu bölüm iki kod örneği içerir. İlk kod örneği, bilgileri görüntülemek için bir ObjectDataSource nesnenin bir iş nesnesi ve bir GridView denetimle nasıl kullanılacağını gösterir. İkinci kod örneği, ilk kod örneğinde kullanılan orta katman iş nesnesini sağlar.

Aşağıdaki kod örneği, bir denetimin ObjectDataSource bir iş nesnesi ve GridView bir denetimle bilgileri görüntülemek için nasıl kullanılacağını gösterir. Web sayfanızın gerçekleştirdiği her veri işlemi için oluşturulması çok pahalı olan (zaman veya kaynaklar açısından) bir iş nesnesiyle çalışabilirsiniz. Pahalı bir nesneyle çalışmanın bir yolu, bunun bir örneğini bir kez oluşturmak ve ardından her veri işlemi için oluşturup yok etmek yerine sonraki işlemler için önbelleğe almak olabilir.

Not

Bir üretim uygulamasında birden çok istek aynı örneği kullanarak aynı anda sonuçlanabilir. Bu nedenle, nesnenin iş parçacığı güvenli bir şekilde uygulanması gerekir.

Bu kod örneği bu düzeni gösterir. Olayı işleyip ObjectCreating önce bir nesnenin önbelleğini denetleyebilirsiniz ve yalnızca bir nesne örneği (henüz önbelleğe alınmamışsa) oluşturabilirsiniz. Ardından, iş nesnesini yok etmek yerine gelecekte kullanmak üzere önbelleğe almak için olayı işleyin ObjectDisposing . Bu kod örneğindeCancelEventArgs.Cancel, nesnesinin ObjectDataSourceDisposingEventArgs özelliği nesnesi üzerinde yöntemini çağırmamaya Dispose yönlendirmek ObjectDataSource için olarak ayarlanırtrue.

<%@ 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>

Aşağıdaki kod örneği, önceki kod örneğinin kullandığı örnek orta katman iş nesnesini sağlar. Kod örneği, iş mantığını kapsülleyen durum bilgisi olan bir sınıf olan sınıfı tarafından EmployeeLogic tanımlanan temel bir iş nesnesinden oluşur. Tam bir çalışma örneği için bu kodu kitaplık olarak derlemeniz ve bu sınıfları bir ASP.NET sayfasından (.aspx dosyası) kullanmanız gerekir.

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;
    }
  }
}
Imports System.Collections
Imports System.Web.UI
Imports System.Web.UI.WebControls

Namespace Samples.AspNet.VB

  Public Class EmployeeLogic
    
    
    Public Sub New() 
        MyClass.New(DateTime.Now)
    
    End Sub
    
    
    Public Sub New(ByVal creationTime As DateTime) 
        _creationTime = creationTime
    
    End Sub
    
    Private _creationTime As DateTime
    
    
    ' Returns a collection of NorthwindEmployee objects.
    Public Function GetCreateTime() As ICollection 
        Dim al As New ArrayList()
        
        ' Returns creation time for this example.      
        al.Add("The business object that you are using was created at " + _creationTime)
        
        Return al
    
    End Function 'GetCreateTime
  End Class
End Namespace ' Samples.AspNet.VB

Açıklamalar

Veri işlemini static gerçekleştirmek için tanımlanan yöntem (Shared Visual Basic'te) ObjectCreating ise ve ObjectCreated olayları hiçbir zaman tetiklenir.

Denetim, ObjectDataSource yansıma kullanarak bir örneğini oluşturmak için bir iş nesnesinin parametresiz oluşturucusunu otomatik olarak çağırır. Başka bir oluşturucuyu ObjectCreating açıkça çağırmak için olayı işleyin ve sonuç olarak nesnenin örneğini ilişkili ObjectDataSourceEventArgs nesnenin ObjectInstance özelliğine ayarlayın.

Olayları işleme hakkında daha fazla bilgi için bkz. Olayları İşleme ve Oluşturma.

Şunlara uygulanır

Ayrıca bkz.