ObjectDataSource.ObjectDisposing Événement
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Se produit avant que l'objet identifié par la propriété TypeName ne soit ignoré.
public:
event System::Web::UI::WebControls::ObjectDataSourceDisposingEventHandler ^ ObjectDisposing;
public event System.Web.UI.WebControls.ObjectDataSourceDisposingEventHandler ObjectDisposing;
member this.ObjectDisposing : System.Web.UI.WebControls.ObjectDataSourceDisposingEventHandler
Public Custom Event ObjectDisposing As ObjectDataSourceDisposingEventHandler
Type d'événement
Exemples
Cette section contient deux exemples de code. Le premier exemple de code montre comment utiliser un ObjectDataSource objet avec un objet métier et un GridView contrôle pour afficher des informations. Le deuxième exemple de code fournit l’objet métier de niveau intermédiaire utilisé dans le premier exemple de code.
L’exemple de code suivant montre comment utiliser un ObjectDataSource contrôle avec un objet métier et un GridView contrôle pour afficher des informations. Vous pouvez utiliser un objet métier très coûteux à créer (en termes de temps ou de ressources) pour chaque opération de données effectuée par votre page web. Une façon de travailler avec un objet coûteux peut être de créer une instance de celui-ci une fois, puis de la mettre en cache pour les opérations suivantes au lieu de la créer et de la détruire pour chaque opération de données. Cet exemple illustre ce modèle. Vous pouvez gérer l’événement ObjectCreating pour vérifier d’abord la présence d’un objet dans le cache et créer une instance de celui-ci uniquement si celle-ci n’est pas déjà mise en cache. Ensuite, gérez l’événement ObjectDisposing pour mettre en cache l’objet métier en vue d’une utilisation ultérieure, au lieu de le détruire. Dans cet exemple de code, la CancelEventArgs.Cancel propriété de l’objet ObjectDataSourceDisposingEventArgs est définie true
sur pour diriger pour ObjectDataSource ne pas appeler la Dispose méthode sur l’objet.
<%@ 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>
L’exemple de code suivant fournit l’exemple d’objet métier de niveau intermédiaire utilisé dans l’exemple de code précédent. L’exemple de code se compose d’un objet métier de base, défini par la EmployeeLogic
classe, qui est une classe avec état qui encapsule la logique métier. Pour obtenir un exemple de travail complet, vous devez compiler ce code en tant que bibliothèque et utiliser ces classes à partir d’une page ASP.NET (fichier .aspx).
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
L’exemple suivant montre comment gérer l’événement lors de l’utilisation ObjectDisposing d’un ObjectDataSource contrôle avec une classe LINQ to SQL.
Public Sub ExampleObjectDisposing(ByVal sender As Object, _
ByVal e As ObjectDataSourceDisposingEventArgs)
e.Cancel = True
End Sub
public void ExampleObjectDisposing(object sender,
ObjectDataSourceDisposingEventArgs e)
{
e.Cancel = true;
}
Remarques
L’événement ObjectDisposing est toujours déclenché avant que l’instance de l’objet métier ne soit ignorée. Si l’objet métier implémente l’interface IDisposable , la Dispose méthode est appelée après que cet événement a été déclenché.
Gérez l’événement ObjectDisposing pour appeler d’autres méthodes sur l’objet, définir des propriétés ou effectuer un nettoyage spécifique à l’objet avant la destruction de l’objet. Une référence à l’objet est accessible par la ObjectInstance propriété, qui est exposée par l’objet ObjectDataSourceEventArgs .
Lorsque vous utilisez un ObjectDataSource contrôle avec une classe LINQ to SQL, vous devez annuler la suppression de la classe de contexte de données dans un gestionnaire pour l’événement ObjectDisposing . Cette étape est nécessaire, car LINQ to SQL prend en charge l’exécution différée, tandis que le ObjectDataSource contrôle tente de supprimer le contexte de données après l’opération Select.
Pour plus d’informations sur la façon de gérer les événements, consultez gestion et déclenchement d’événements.