ObjectDataSource.CacheKeyDependency Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Obtém ou define uma dependência de chave definida pelo utilizador que está ligada a todos os objetos de cache de dados criados pelo controlo de fonte de dados.
public:
virtual property System::String ^ CacheKeyDependency { System::String ^ get(); void set(System::String ^ value); };
public virtual string CacheKeyDependency { get; set; }
member this.CacheKeyDependency : string with get, set
Public Overridable Property CacheKeyDependency As String
Valor de Propriedade
Uma chave que identifica todos os objetos de cache criados pelo ObjectDataSource.
Exemplos
Os três exemplos seguintes mostram uma página Web, uma classe de página code-behind e uma classe de acesso a dados que recuperam registos da tabela Employees na base de dados Northwind.
O primeiro exemplo mostra uma página Web que contém dois ObjectDataSource controlos, um DropDownList controlo e um DetailsView controlo. O primeiro ObjectDataSource controlo e o controlo DropDownList são usados para recuperar e mostrar os nomes dos funcionários da base de dados. O segundo ObjectDataSource controlo e o DetailsView controlo são usados para recuperar e exibir o registo do empregado selecionado pelo utilizador.
O cache está ativado para o ObjectDataSource controlo. Assim, cada registo é recuperado apenas uma vez da base de dados. A CacheKeyDependency propriedade está definida como "EmployeeDetails", mas qualquer valor de string pode funcionar como chave. A página Web inclui também um Button controlo que permite ao utilizador clicar para expirar os dados em cache.
<form id="form1" runat="server">
<div>
<asp:objectdatasource
ID="ObjectDataSource1"
runat="server"
SelectMethod="GetFullNamesAndIDs"
TypeName="Samples.AspNet.CS.EmployeeLogic" />
<p>
<asp:dropdownlist
ID="DropDownList1"
runat="server"
DataSourceID="ObjectDataSource1"
DataTextField="FullName"
DataValueField="EmployeeID"
AutoPostBack="True"
AppendDataBoundItems="true">
<asp:ListItem Text="Select One" Value=""></asp:ListItem>
</asp:dropdownlist>
</p>
<asp:objectdatasource
ID="ObjectDataSource2"
runat="server"
SelectMethod="GetEmployee"
TypeName="Samples.AspNet.CS.EmployeeLogic"
EnableCaching="true"
CacheKeyDependency="EmployeeDetails" >
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" DefaultValue="-1" Name="empID" />
</SelectParameters>
</asp:objectdatasource>
<asp:DetailsView
ID="DetailsView1"
runat="server"
DataSourceID="ObjectDataSource2"
AutoGenerateRows="false">
<Fields>
<asp:BoundField HeaderText="Address" DataField="Address" />
<asp:BoundField HeaderText="City" DataField="City" />
<asp:BoundField HeaderText="Postal Code" DataField="PostalCode" />
</Fields>
</asp:DetailsView>
<asp:Button
ID="Button1"
runat="server"
Text="Check for latest data"
OnClick="Button1_Click" />
</div>
</form>
<form id="form1" runat="server">
<div>
<asp:objectdatasource
ID="ObjectDataSource1"
runat="server"
SelectMethod="GetFullNamesAndIDs"
TypeName="Samples.AspNet.CS.EmployeeLogic" />
<p>
<asp:dropdownlist
ID="DropDownList1"
runat="server"
DataSourceID="ObjectDataSource1"
DataTextField="FullName"
DataValueField="EmployeeID"
AutoPostBack="True"
AppendDataBoundItems="true">
<asp:ListItem Text="Select One" Value=""></asp:ListItem>
</asp:dropdownlist>
</p>
<asp:objectdatasource
ID="ObjectDataSource2"
runat="server"
SelectMethod="GetEmployee"
TypeName="Samples.AspNet.CS.EmployeeLogic"
EnableCaching="true"
CacheKeyDependency="EmployeeDetails" >
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" DefaultValue="-1" Name="empID" />
</SelectParameters>
</asp:objectdatasource>
<asp:DetailsView
ID="DetailsView1"
runat="server"
DataSourceID="ObjectDataSource2"
AutoGenerateRows="false">
<Fields>
<asp:BoundField HeaderText="Address" DataField="Address" />
<asp:BoundField HeaderText="City" DataField="City" />
<asp:BoundField HeaderText="Postal Code" DataField="PostalCode" />
</Fields>
</asp:DetailsView>
<asp:Button
ID="Button1"
runat="server"
Text="Check for latest data"
OnClick="Button1_Click" />
</div>
</form>
O segundo exemplo mostra um manipulador para o Load evento e um manipulador para o Click evento do Button controlo. O Load gestor de eventos cria um item de cache com uma chave definida para o CacheKeyDependency valor. O Click gestor de eventos remove o item de cache cuja chave é igual ao CacheKeyDependency valor. Quando o item da cache é removido, todos os dados em cache que dependem da chave expiram.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Cache[ObjectDataSource2.CacheKeyDependency] = "CacheExample";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Cache.Remove(ObjectDataSource2.CacheKeyDependency);
Cache[ObjectDataSource2.CacheKeyDependency] = "CacheExample";
DetailsView1.DataBind();
}
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
If Not (IsPostBack) Then
Cache(ObjectDataSource2.CacheKeyDependency) = "CacheExample"
End If
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
Cache.Remove(ObjectDataSource2.CacheKeyDependency)
Cache(ObjectDataSource2.CacheKeyDependency) = "CacheExample"
DetailsView1.DataBind()
End Sub
O terceiro exemplo mostra a classe de acesso aos dados que interage com a base de dados Northwind. A classe utiliza o LINQ para consultar a tabela Employees. O exemplo requer uma classe LINQ para SQL que represente a base de dados Northwind e a tabela Employees. Para mais informações, veja Como: Criar Classes LINQ para SQL numa Web Project.
public class EmployeeLogic
{
public static Array GetFullNamesAndIDs()
{
NorthwindDataContext ndc = new NorthwindDataContext();
var employeeQuery =
from e in ndc.Employees
orderby e.LastName
select new { FullName = e.FirstName + " " + e.LastName, EmployeeID = e.EmployeeID };
return employeeQuery.ToArray();
}
public static Employee GetEmployee(int empID)
{
if (empID < 0)
{
return null;
}
else
{
NorthwindDataContext ndc = new NorthwindDataContext();
var employeeQuery =
from e in ndc.Employees
where e.EmployeeID == empID
select e;
return employeeQuery.Single();
}
}
public static void UpdateEmployeeAddress(Employee originalEmployee, string address, string city, string postalcode)
{
NorthwindDataContext ndc = new NorthwindDataContext();
ndc.Employees.Attach(originalEmployee, false);
originalEmployee.Address = address;
originalEmployee.City = city;
originalEmployee.PostalCode = postalcode;
ndc.SubmitChanges();
}
}
Public Class EmployeeLogic
Public Shared Function GetFullNamesAndIDs() As Array
Dim ndc As New NorthwindDataContext()
Dim employeeQuery = _
From e In ndc.Employees _
Order By e.LastName _
Select FullName = e.FirstName + " " + e.LastName, EmployeeID = e.EmployeeID
Return employeeQuery.ToArray()
End Function
Public Shared Function GetEmployee(ByVal empID As Integer) As Employee
If (empID < 0) Then
Return Nothing
Else
Dim ndc As New NorthwindDataContext()
Dim employeeQuery = _
From e In ndc.Employees _
Where e.EmployeeID = empID _
Select e
Return employeeQuery.Single()
End If
End Function
Public Shared Sub UpdateEmployeeAddress(ByVal originalEmployee As Employee, ByVal address As String, ByVal city As String, ByVal postalcode As String)
Dim ndc As New NorthwindDataContext()
ndc.Employees.Attach(originalEmployee, False)
originalEmployee.Address = address
originalEmployee.City = city
originalEmployee.PostalCode = postalcode
ndc.SubmitChanges()
End Sub
End Class
Observações
A CacheKeyDependency propriedade pode ser definida para qualquer valor de cadeia arbitrário.
Todos os objetos de cache ficam explicitamente expirados quando a chave expira. Isto permite-lhe invalidar entradas de cache criadas a ObjectDataSource partir do seu próprio código de página, de forma programática.
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.
Podes definir a CacheKeyDependency propriedade para criar uma dependência entre todas as entradas de cache criadas pelo ObjectDataSource controlo e pela chave. Podes expirar todas as entradas de cache programaticamente a qualquer momento, expirando a chave. Expire a chave usando o Cache.Remove método com o valor atual CacheKeyDependency como parâmetro.
Uma entrada de cache única é criada para cada combinação das CacheDurationpropriedades , CacheExpirationPolicy, TypeName, SelectMethod, e SelectParameters . Múltiplos ObjectDataSource controlos podem usar as mesmas entradas de cache em cenários onde carregam dados usando o mesmo tipo, método e parâmetros.