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

DataSourceCacheExpiry 值之一。 默认值为 Absolute

示例

本部分包含两个代码示例。 第一个代码示例演示对象 ObjectDataSource 如何支持筛选和缓存。 第二个代码示例演示如何实现返回对象 DataSet 以启用对象缓存和筛选的 ObjectDataSource 包装方法。

下面的代码示例演示控件 ObjectDataSource 如何支持筛选和缓存。 若要启用筛选和缓存,必须实现检索由属性标识 SelectMethod 的数据的方法,以将数据作为 DataSet 对象返回。 在此示例中,缓存是启用的,因为EmployeeLogic对象返回数据为 aDataSet,属性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的包装方法,而不是完全重构对象以ObjectDataSource在Web Forms页上使用。该方法将返回一组NorthwindEmployee数据作为一个DataSet。 此代码示例是为类提供的大型示例的 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 该方法从业务对象检索数据,然后再次缓存数据。

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

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

适用于

另请参阅