ObjectDataSource.CacheExpirationPolicy Propriedade

Definição

Obtém ou define o comportamento de expiração de cache que, quando combinado com a duração, descreve o comportamento do cache usado pelo controle de fonte de dados.

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

Valor da propriedade

DataSourceCacheExpiry

Um dos valores de DataSourceCacheExpiry. O padrão é Absolute.

Exemplos

Esta seção contém dois exemplos de código. O primeiro exemplo de código demonstra como um ObjectDataSource objeto dá suporte à filtragem e ao cache. O segundo exemplo de código demonstra como implementar um método wrapper que retorna um DataSet objeto para habilitar o cache e a filtragem com um ObjectDataSource objeto.

O exemplo de código a seguir demonstra como um ObjectDataSource controle dá suporte à filtragem e ao cache. Para habilitar a filtragem e o cache, você deve implementar o método que recupera dados, que é identificado pela SelectMethod propriedade, para retornar os dados como um DataSet objeto. Neste exemplo, o cache está habilitado porque o EmployeeLogic objeto retorna dados como umDataSet, a EnableCaching propriedade é definida truecomo e as propriedades e CacheExpirationPolicy são CacheDuration definidas. Os ObjectDataSource dados de cache retornados pela SelectMethod propriedade por 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 a seguir demonstra como implementar um método wrapper que retorna um DataSet objeto para habilitar o cache e a filtragem com um ObjectDataSource controle. Na implementação base da EmployeeLogic classe, o GetAllEmployees método retorna um ArrayList. Em vez de refatorar completamente o objeto para trabalhar com a ObjectDataSource página em uma Web Forms, um método wrapper nomeado GetAllEmployeesAsDataSet é adicionado que retorna 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

Comentários

O ObjectDataSource controle dá suporte ao cache de dados. Embora os dados sejam armazenados em cache, as chamadas para o Select método recuperam dados do cache em vez do objeto de negócios com o qual o ObjectDataSource objeto funciona. Quando o cache expira, o Select método recupera dados do objeto de negócios e armazena os dados em cache novamente.

O ObjectDataSource controle armazena automaticamente dados em cache quando a EnableCaching propriedade é definida true e a CacheDuration propriedade é definida como um valor maior que 0, o que indica o número de segundos em que o cache armazena dados antes que a entrada de cache seja descartada. Um valor 0 indica um período de cache infinitamente longo.

O cache é regulado por uma combinação da duração e da CacheExpirationPolicy configuração. Se a CacheExpirationPolicy propriedade for definida como o Absolute valor, os ObjectDataSource dados serão armazenados em cache na primeira chamada para o método e os Select manterão na memória para, no máximo, a quantidade de tempo especificada pela CacheDuration propriedade. Os dados poderão ser liberados antes do tempo de duração, se a memória for necessária. Em seguida, o cache é atualizado durante a próxima chamada para o Select método. Se a CacheExpirationPolicy propriedade for definida como o Sliding valor, o controle da fonte de dados armazenará em cache os dados na primeira chamada para o Select método, mas redefinirá a janela de tempo para a qual ela contém o cache para cada chamada subsequente ao Select método. O cache expirará se não houver atividade por um tempo igual à CacheDuration propriedade desde a última chamada ao Select método.

Aplica-se a

Confira também