ObjectDataSource.CacheKeyDependency Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera lub ustawia zależność klucza zdefiniowanego przez użytkownika, która jest połączona z wszystkimi obiektami pamięci podręcznej danych utworzonymi przez kontrolę źródła danych.
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
Wartość właściwości
Klucz identyfikujący wszystkie obiekty pamięci podręcznej utworzone przez ObjectDataSourceobiekt .
Przykłady
W poniższych trzech przykładach pokazano stronę sieci Web, klasę stron za kodem oraz klasę dostępu do danych, która pobiera rekordy z tabeli Employees w bazie danych Northwind.
W pierwszym przykładzie przedstawiono stronę sieci Web zawierającą dwie ObjectDataSource kontrolki, kontrolkę DropDownList i kontrolkę DetailsView . Pierwsza ObjectDataSource kontrolka i kontrolka DropDownList służą do pobierania i wyświetlania nazw pracowników z bazy danych. Druga ObjectDataSource kontrolka i kontrolka DetailsView są używane do pobierania i wyświetlania rekordu pracownika wybranego przez użytkownika.
Buforowanie jest włączone dla kontrolki ObjectDataSource . W związku z tym każdy rekord jest pobierany tylko raz z bazy danych. Właściwość jest ustawiona CacheKeyDependency na wartość "EmployeeDetails", ale dowolna wartość ciągu może działać jako klucz. Strona sieci Web zawiera również kontrolkę Button , którą użytkownik może kliknąć, aby wygasnąć buforowane dane.
<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>
W drugim przykładzie pokazano procedurę obsługi dla Load zdarzenia i procedurę obsługi Click zdarzenia kontrolki Button . Procedura Load obsługi zdarzeń tworzy element pamięci podręcznej z kluczem ustawionym CacheKeyDependency na wartość. Procedura Click obsługi zdarzeń usuwa element pamięci podręcznej, którego klucz jest równy CacheKeyDependency wartości. Po usunięciu elementu pamięci podręcznej wszystkie buforowane dane zależne od klucza wygasły.
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
Trzeci przykład przedstawia klasę dostępu do danych, która współdziała z bazą danych Northwind. Klasa używa LINQ do wykonywania zapytań względem tabeli Employees. Przykład wymaga klasy LINQ to SQL reprezentującej bazę danych Northwind i tabelę Employees. Aby uzyskać więcej informacji, zobacz How to: Create LINQ to SQL Classes in a Web Project (Instrukcje: tworzenie klas LINQ to SQL w projekcie internetowym).
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
Uwagi
Właściwość CacheKeyDependency można ustawić na dowolną dowolną wartość ciągu.
Wszystkie obiekty pamięci podręcznej są jawnie wygasły po wygaśnięciu klucza. Umożliwia to programowe unieważnianie wpisów pamięci podręcznej utworzonych na ObjectDataSource podstawie własnego kodu strony.
Kontrolka ObjectDataSource obsługuje buforowanie danych. Gdy dane są buforowane, wywołania Select metody pobierają dane z pamięci podręcznej, a nie z obiektu biznesowego, z którego ObjectDataSource działa. Gdy pamięć podręczna wygaśnie, Select metoda pobiera dane z obiektu biznesowego, a następnie ponownie buforuje dane.
Kontrolka ObjectDataSource automatycznie buforuje dane, gdy EnableCaching właściwość jest ustawiona true
na , a CacheDuration właściwość jest ustawiona na wartość większą niż 0, co wskazuje liczbę sekund przechowywania danych w pamięci podręcznej przed odrzuceniem wpisu pamięci podręcznej. Wartość 0 wskazuje nieskończonie długą pamięć podręczną.
Właściwość można ustawić CacheKeyDependency tak, aby utworzyć zależność między wszystkimi wpisami pamięci podręcznej utworzonymi przez kontrolkę ObjectDataSource i kluczem. Wszystkie wpisy pamięci podręcznej można wygasać programowo w dowolnym momencie, wygasając klucz. Wygasanie klucza przy użyciu Cache.Remove metody z bieżącą CacheKeyDependency wartością jako parametru.
Unikatowy wpis pamięci podręcznej jest tworzony dla każdej kombinacji CacheDurationwłaściwości , , CacheExpirationPolicyTypeName, SelectMethodi SelectParameters . Wiele ObjectDataSource kontrolek może używać tych samych wpisów pamięci podręcznej w scenariuszach, w których ładują dane przy użyciu tego samego typu, metody i parametrów.