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 。 在 类的EmployeeLogic基实现中GetAllEmployees, 方法返回 。ArrayList 添加了一个名为 GetAllEmployeesAsDataSet 的包装器方法,该方法返回一组数据作为 DataSet,而不是完全重构对象以使用 ObjectDataSource Web 窗体页上的 NorthwindEmployee 。 此代码示例是为 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 方法从业务对象检索数据,然后再次缓存数据。

当 属性设置为 并且 CacheDuration 属性设置为true大于 0 的值时EnableCaching,控件ObjectDataSource会自动缓存数据,该值指示缓存在放弃缓存条目之前存储数据的秒数。 值为 0 表示无限长的缓存周期。

缓存由持续时间和 CacheExpirationPolicy 设置的组合进行调节。 如果 属性 CacheExpirationPolicy 设置为 Absolute 值,则会 ObjectDataSource 在首次调用 Select 方法时缓存数据,并将其保留在内存中,最多保留属性指定的 CacheDuration 时间量。 如果需要内存,可以在持续时间之前释放数据。 然后在下一次调用 Select 方法期间刷新缓存。 CacheExpirationPolicy如果 属性设置为 Sliding 值,则数据源控件在对 方法的第一次调用Select时缓存数据,但会重置它保存每次后续调用Select方法的缓存的时间窗口。 如果自上次调用 Select 方法以来没有活动的时间等于 CacheDuration 属性,则缓存将过期。

适用于

另请参阅