共用方式為


ObjectDataSource.CacheExpirationPolicy 屬性

定義

取得或設定快取到期行為,當與持續期間搭配使用時,用來描述資料來源控制項所使用的快取行為。

public:
 virtual property System::Web::UI::DataSourceCacheExpiry CacheExpirationPolicy { System::Web::UI::DataSourceCacheExpiry get(); void set(System::Web::UI::DataSourceCacheExpiry value); };
public virtual System.Web.UI.DataSourceCacheExpiry CacheExpirationPolicy { get; set; }
member this.CacheExpirationPolicy : System.Web.UI.DataSourceCacheExpiry with get, set
Public Overridable Property CacheExpirationPolicy As DataSourceCacheExpiry

屬性值

其中一個 DataSourceCacheExpiry 值。 預設為 Absolute

範例

本節包含兩個程式碼範例。 第一個程式代碼範例示範物件如何 ObjectDataSource 支援篩選和快取。 第二個程式代碼範例示範如何實作傳回 DataSet 對象的包裝函式方法,以啟用物件的快取和篩選 ObjectDataSource

下列程式代碼範例示範控件如何 ObjectDataSource 支援篩選和快取。 若要啟用篩選和快取,您必須實作 方法,以擷取 屬性所識別 SelectMethod 的數據,以將數據傳回為 DataSet 物件。 在此範例中 EmployeeLogic ,會啟用快取,因為物件會以 DataSet傳回數據,而 EnableCaching 屬性會設定為 true,而且 會 CacheDuration 設定 和 CacheExpirationPolicy 屬性。 會 ObjectDataSource 快取 屬性所傳 SelectMethod 回的數據 30 秒。

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="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">
<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:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          typename="Samples.AspNet.CS.EmployeeLogic"
          selectmethod="GetAllEmployeesAsDataSet"
          enablecaching="True"
          cacheduration="30"
          cacheexpirationpolicy="Absolute" />

    </form>
  </body>
</html>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB" Assembly="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">
<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:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          typename="Samples.AspNet.VB.EmployeeLogic"
          selectmethod="GetAllEmployeesAsDataSet"
          enablecaching="True"
          cacheduration="30"
          cacheexpirationpolicy="Absolute" />

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

下列程式代碼範例示範如何實作傳回 DataSet 物件的包裝函式方法,以啟用控件的快取和篩選 ObjectDataSource 。 在類別的基底實作中 EmployeeLogicGetAllEmployees 方法會 ArrayList傳回 。 新增名為 GetAllEmployeesAsDataSetNorthwindEmployeeDataSet的包裝函式方法,而不是完全重構 物件以在 Web Forms 頁面上使用 。ObjectDataSource 此程式代碼範例是針對 類別提供的較大範例的 ObjectDataSource 一部分。

//
// To support basic filtering, the employees cannot
// be returned as an array of objects, rather as a
// DataSet of the raw data values.
public static DataSet GetAllEmployeesAsDataSet () {
  ICollection employees = GetAllEmployees();

  DataSet ds = new DataSet("Table");

  // Create the schema of the DataTable.
  DataTable dt = new DataTable();
  DataColumn dc;
  dc = new DataColumn("FirstName", typeof(string)); dt.Columns.Add(dc);
  dc = new DataColumn("LastName",  typeof(string)); dt.Columns.Add(dc);
  dc = new DataColumn("Title",     typeof(string)); dt.Columns.Add(dc);
  dc = new DataColumn("Courtesy",  typeof(string)); dt.Columns.Add(dc);
  dc = new DataColumn("Supervisor",typeof(Int32));  dt.Columns.Add(dc);

  // Add rows to the DataTable.
  IEnumerator emplEnum = employees.GetEnumerator();
  DataRow row;
  NorthwindEmployee ne;
  while (emplEnum.MoveNext()) {
    ne = emplEnum.Current as NorthwindEmployee;
    row = dt.NewRow();
    row["FirstName"]  = ne.FirstName;
    row["LastName"]   = ne.LastName;
    row["Title"]      = ne.Title;
    row["Courtesy"]   = ne.Courtesy;
    row["Supervisor"] = ne.Supervisor;
    dt.Rows.Add(row);
  }
  // Add the complete DataTable to the DataSet.
  ds.Tables.Add(dt);

  return ds;
}
' To support basic filtering, the employees cannot
' be returned as an array of objects, rather as a
' DataSet of the raw data values.
Public Shared Function GetAllEmployeesAsDataSet() As DataSet
   Dim employees As ICollection = GetAllEmployees()

   Dim ds As New DataSet("Table")

   ' Create the schema of the DataTable.
   Dim dt As New DataTable()
   Dim dc As DataColumn
   dc = New DataColumn("FirstName", GetType(String))
   dt.Columns.Add(dc)
   dc = New DataColumn("LastName", GetType(String))
   dt.Columns.Add(dc)
   dc = New DataColumn("Title", GetType(String))
   dt.Columns.Add(dc)
   dc = New DataColumn("Courtesy", GetType(String))
   dt.Columns.Add(dc)
   dc = New DataColumn("Supervisor", GetType(Int32))
   dt.Columns.Add(dc)

   ' Add rows to the DataTable.
   Dim emplEnum As IEnumerator = employees.GetEnumerator()
   Dim row As DataRow
   Dim ne As NorthwindEmployee
   While emplEnum.MoveNext()
      ne = CType(emplEnum.Current, NorthwindEmployee)
      row = dt.NewRow()
      row("FirstName") = ne.FirstName
      row("LastName") = ne.LastName
      row("Title") = ne.Title
      row("Courtesy") = ne.Courtesy
      row("Supervisor") = ne.Supervisor
      dt.Rows.Add(row)
   End While
   ' Add the complete DataTable to the DataSet.
   ds.Tables.Add(dt)

   Return ds
End Function 'GetAllEmployeesAsDataSet

備註

控件 ObjectDataSource 支持數據快取。 快取數據時,呼叫 方法會 Select 從快取擷取數據,而不是從 所使用的商務物件 ObjectDataSource 擷取數據。 當快取過期時, Select 方法會從商務物件擷取數據,然後再次快取數據。

ObjectDataSource 屬性設定true為 且 CacheDuration 屬性設定為大於 0 的值時EnableCaching,控件會自動快取數據,這表示快取在捨棄快取專案之前儲存數據的秒數。 值為 0 表示無限長快取期間。

快取是由持續時間和 CacheExpirationPolicy 設定的組合所規範。 CacheExpirationPolicy如果屬性設定為 Absolute 值,則會在ObjectDataSource第一次呼叫 Select 方法時快取數據,並將它儲存在記憶體中,最多是 屬性所CacheDuration指定的時間量。 如果需要記憶體,數據可能會在持續時間之前釋放。 然後在下 Select 一次呼叫 方法時重新整理快取。 CacheExpirationPolicy如果 屬性設定為 Sliding 值,數據源控件會在第一次呼叫 Select 方法時快取數據,但會重設其保留每個後續呼叫方法之Select快取的時間範圍。 如果自上次呼叫 Select 方法以來沒有等於 CacheDuration 屬性的活動,快取就會過期。

適用於

另請參閱