ObjectDataSourceDisposingEventArgs.ObjectInstance プロパティ
アセンブリ: System.Web (system.web.dll 内)

Dim instance As ObjectDataSourceDisposingEventArgs Dim value As Object value = instance.ObjectInstance
ObjectDataSource がデータ操作を実行するために使用するビジネス オブジェクト。それ以外で null 参照 (Visual Basic では Nothing) が ObjectDataSourceEventArgs に渡される場合は、null 参照 (Visual Basic では Nothing)。

データ操作メソッド (SelectMethod、UpdateMethod、DeleteMethod、および InsertMethod) がインスタンス メソッドの場合、メソッドの実行前にビジネス オブジェクトのインスタンスが作成されます。オブジェクトを ObjectDisposing イベント ハンドラの ObjectInstance プロパティに保存することで、呼び出すたびにビジネス オブジェクトが作成されないようにできます。後続の ObjectCreating イベントでは、ObjectInstance プロパティからビジネス オブジェクトを取得できます。

ビジネス オブジェクトおよび GridView コントロールで、ObjectDataSource コントロールを使用して情報を表示する方法を次のコード例に示します。Web ページで実行される各データ操作に、作成時の負荷が大きい (作成に時間がかかる、リソースの消費が激しいなど) ビジネス オブジェクトを使用している可能性があります。負荷のかかるオブジェクトを使用する場合は、データを操作するたびにインスタンス化と破棄を繰り返すのではなく、インスタンス化したオブジェクトを後続の処理で再利用できるようにキャッシュに格納しておくことをお勧めします。この例では、このパターンを示します。ObjectCreating イベントを処理することで、キャッシュにオブジェクトが存在するかどうかをチェックしてから、存在しない場合にのみ、インスタンスを作成できます。次に、ObjectDisposing イベントを処理し、ビジネス オブジェクトを破棄せずに、キャッシュに保存して後で使用できるようにします。この例では、ObjectDataSource がインスタンスで Dispose を呼び出さないように、ObjectDataSourceDisposingEventArgs クラスの CancelEventArgs.Cancel プロパティが true に設定されています。
<%@ Import namespace="Samples.AspNet.VB" %> <%@ Page language="vb" %> <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> <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>
<%@ Import namespace="Samples.AspNet.CS" %> <%@ Page language="c#" %> <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> <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>

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- ObjectDataSourceDisposingEventArgs.ObjectInstance プロパティのページへのリンク