ObjectDataSource.CacheKeyDependency Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene o imposta una dipendenza di chiave definita dall'utente collegata a tutti gli oggetti cache dati creati dal controllo origine dati.
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
Valore della proprietà
Chiave che identifica tutti gli oggetti relativi alla cache creati dall'oggetto ObjectDataSource.
Esempio
I tre esempi seguenti illustrano una pagina Web, una classe di pagine code-behind e una classe di accesso ai dati che recupera i record dalla tabella Employees nel database Northwind.
Il primo esempio mostra una pagina Web che contiene due ObjectDataSource controlli, un DropDownList controllo e un DetailsView controllo . Il primo ObjectDataSource controllo e il DropDownList controllo vengono usati per recuperare e visualizzare i nomi dei dipendenti dal database. Il secondo ObjectDataSource controllo e il DetailsView controllo vengono usati per recuperare e visualizzare il record dipendente selezionato dall'utente.
La memorizzazione nella cache è abilitata per il ObjectDataSource controllo . Di conseguenza, ogni record viene recuperato una sola volta dal database. La CacheKeyDependency proprietà è impostata su "EmployeeDetails", ma qualsiasi valore stringa può funzionare come chiave. La pagina Web include anche un Button controllo che l'utente può fare clic per scadere i dati memorizzati nella 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>
Il secondo esempio mostra un gestore per l'evento Load e un gestore per l'evento Click del Button controllo. Il Load gestore eventi crea un elemento della cache con una chiave impostata sul CacheKeyDependency valore . Il Click gestore eventi rimuove l'elemento della cache la CacheKeyDependency cui chiave è uguale al valore . Quando l'elemento della cache viene rimosso, tutti i dati memorizzati nella cache dipendenti dalla chiave sono scaduti.
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
Il terzo esempio mostra la classe di accesso ai dati che interagisce con il database Northwind. La classe usa LINQ per eseguire una query sulla tabella Employees. L'esempio richiede una classe LINQ to SQL che rappresenta il database Northwind e la tabella Employees. Per altre informazioni, vedere Procedura: Creare classi LINQ to SQL in un progetto Web.
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
Commenti
La CacheKeyDependency proprietà può essere impostata su qualsiasi valore stringa arbitrario.
Tutti gli oggetti relativi alla cache scadono in modo esplicito quando scade la chiave. In questo modo è possibile invalidare le voci della cache create dal ObjectDataSource codice della propria pagina a livello di codice.
Il controllo supporta la ObjectDataSource memorizzazione nella cache dei dati. Mentre i dati vengono memorizzati nella cache, le chiamate al Select metodo recuperano i dati dalla cache anziché dall'oggetto ObjectDataSource business usato da . Alla scadenza della cache, il Select metodo recupera i dati dall'oggetto business e quindi memorizza nuovamente nella cache i dati.
Il ObjectDataSource controllo memorizza automaticamente nella cache i dati quando la EnableCaching proprietà è impostata su true
e la CacheDuration proprietà è impostata su un valore maggiore di 0, che indica il numero di secondi in cui la cache archivia i dati prima che la voce della cache venga eliminata. Il valore 0 indica una cache infinitamente lunga.
È possibile impostare la CacheKeyDependency proprietà per creare una dipendenza tra tutte le voci della cache create dal ObjectDataSource controllo e dalla chiave. È possibile scadere tutte le voci della cache a livello di codice in qualsiasi momento scadendo la chiave. Scadere la chiave usando il Cache.Remove metodo con il valore corrente CacheKeyDependency come parametro .
Viene creata una voce di cache univoca per ogni combinazione delle CacheDurationproprietà , CacheExpirationPolicy, TypeName, SelectMethode SelectParameters . Più ObjectDataSource controlli possono usare le stesse voci della cache negli scenari in cui caricano i dati usando lo stesso tipo, metodo e parametri.