ObjectDataSource.CacheKeyDependency Właściwość

Definicja

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.

Dotyczy

Zobacz też