ObjectDataSource.CacheDuration Propriedade

Definição

Obtém ou define o tempo, em segundos, em que o controlo de fonte de dados armazena em cache dados que são recuperados pela SelectMethod propriedade.

public:
 virtual property int CacheDuration { int get(); void set(int value); };
[System.ComponentModel.TypeConverter(typeof(System.Web.UI.DataSourceCacheDurationConverter))]
public virtual int CacheDuration { get; set; }
[<System.ComponentModel.TypeConverter(typeof(System.Web.UI.DataSourceCacheDurationConverter))>]
member this.CacheDuration : int with get, set
Public Overridable Property CacheDuration As Integer

Valor de Propriedade

O número de segundos em que armazena ObjectDataSource em cache os resultados de uma SelectMethod invocação de propriedade. A predefinição é 0. O valor não pode ser negativo.

Atributos

Exemplos

Esta seção contém dois exemplos de código. O primeiro exemplo de código demonstra como um ObjectDataSource objeto suporta cache. O segundo exemplo de código demonstra como implementar um método wrapper que devolve um DataSet objeto para permitir a cache com um ObjectDataSource objeto.

O exemplo de código seguinte demonstra como um ObjectDataSource controlo suporta cache. Para permitir a cache em cache, deve implementar o método que recupera os dados, identificados pela SelectMethod propriedade, para devolver os dados como objeto DataSet . Neste exemplo, a EnableCaching propriedade é definida como true, e as CacheDuration propriedades e CacheExpirationPolicy são definidas. Os ObjectDataSource dados em cache que são devolvidos pela SelectMethod propriedade durante 30 segundos.

<%@ 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>

O exemplo de código seguinte demonstra como implementar um método wrapper que devolve um DataSet objeto para permitir a cache com um ObjectDataSource controlo. Na implementação base da EmployeeLogic classe, o GetAllEmployees método devolve um ArrayList objeto. Em vez de refatorar completamente o objeto para funcionar com a ObjectDataSource página no Web Forms, é adicionado um método wrapper chamado GetAllEmployeesAsDataSet que devolve um conjunto de NorthwindEmployee dados como um DataSet.

Este exemplo de código faz parte de um exemplo maior fornecido para a ObjectDataSource classe.

//
// 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

Observações

O ObjectDataSource controlo suporta cache de dados. Enquanto os dados são armazenados em cache, as chamadas ao Select método recuperam dados da cache em vez do objeto de negócio com que trabalha ObjectDataSource . Quando a cache expira, o Select método recupera os dados do objeto de negócio e depois volta a armazenar os dados em cache.

O ObjectDataSource controlo armazena automaticamente os dados em cache quando a EnableCaching propriedade é definida como true e esta CacheDuration é definida para um valor superior a 0, o que indica o número de segundos em que a cache armazena dados antes de a entrada da cache ser descartada. Um valor de 0 indica uma cache infinitamente longa.

A cache é regulada por uma combinação da duração e da CacheExpirationPolicy definição. Se a CacheExpirationPolicy propriedade for definida para o Absolute valor, os ObjectDataSource dados armazenados em cache na primeira chamada ao Select método e mantêm-nos em memória por, no máximo, o tempo especificado pela CacheDuration propriedade. Os dados podem ser libertados antes do tempo de duração, se a memória for necessária. A cache é então atualizada durante a próxima chamada ao Select método. Se a CacheExpirationPolicy propriedade estiver definida para Sliding valor, o controlo de fonte de dados armazena em cache os dados na primeira chamada ao Select método, mas reinicia a janela temporal para a qual mantém a cache em cada chamada subsequente ao Select método. A cache expira se não houver atividade durante um tempo igual à CacheDuration propriedade desde a última chamada ao Select método.

Aplica-se a

Ver também