Freigeben über


ObjectDataSource.CacheKeyDependency Eigenschaft

Definition

Ruft eine benutzerdefinierte Schlüsselabhängigkeit ab, die mit sämtlichen vom Datenquellen-Steuerelement erstellten Datencacheobjekten verknüpft ist, oder legt diese fest.

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

Eigenschaftswert

Ein Schlüssel, der alle von der ObjectDataSource erstellten Cacheobjekte angibt.

Beispiele

Die folgenden drei Beispiele zeigen eine Webseite, eine CodeBehind-Seitenklasse und eine Datenzugriffsklasse, die Datensätze aus der Tabelle Employees in der Northwind-Datenbank abrufen.

Das erste Beispiel zeigt eine Webseite, die zwei ObjectDataSource Steuerelemente enthält: ein DropDownList -Steuerelement und ein DetailsView -Steuerelement. Das erste ObjectDataSource Steuerelement und das DropDownList Steuerelement werden verwendet, um Mitarbeiternamen aus der Datenbank abzurufen und anzuzeigen. Das zweite ObjectDataSource Steuerelement und das DetailsView Steuerelement werden verwendet, um den vom Benutzer ausgewählten Mitarbeiterdatensatz abzurufen und anzuzeigen.

Das Zwischenspeichern ist für das ObjectDataSource Steuerelement aktiviert. Daher wird jeder Datensatz nur einmal aus der Datenbank abgerufen. Die CacheKeyDependency -Eigenschaft ist auf "EmployeeDetails" festgelegt, aber jeder Zeichenfolgenwert kann als Schlüssel verwendet werden. Die Webseite enthält auch ein Button Steuerelement, auf das der Benutzer klicken kann, um die zwischengespeicherten Daten abzulaufen.

<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>

Das zweite Beispiel zeigt einen Handler für das Load -Ereignis und einen Handler für das Click -Ereignis des Button -Steuerelements. Der Load Ereignishandler erstellt ein Cacheelement mit einem Schlüssel, der auf den CacheKeyDependency Wert festgelegt ist. Der Click Ereignishandler entfernt das Cacheelement, dessen Schlüssel dem CacheKeyDependency -Wert entspricht. Wenn das Cacheelement entfernt wird, sind alle zwischengespeicherten Daten, die vom Schlüssel abhängig sind, abgelaufen.

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

Das dritte Beispiel zeigt die Datenzugriffsklasse, die mit der Northwind-Datenbank interagiert. Die -Klasse verwendet LINQ, um die Employees-Tabelle abzufragen. Für das Beispiel ist eine LINQ to SQL-Klasse erforderlich, die die Northwind-Datenbank und die Employees-Tabelle darstellt. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen von LINQ to SQL-Klassen in einem Webprojekt.

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

Hinweise

Die CacheKeyDependency -Eigenschaft kann auf einen beliebigen Zeichenfolgenwert festgelegt werden.

Alle Cacheobjekte laufen explizit ab, wenn der Schlüssel abläuft. Dadurch können Sie Cacheeinträge, die von ihrem ObjectDataSource eigenen Seitencode erstellt werden, programmgesteuert für ungültig erklären.

Das ObjectDataSource -Steuerelement unterstützt die Datenzwischenspeicherung. Während daten zwischengespeichert werden, rufen Aufrufe der Select -Methode Daten aus dem Cache und nicht aus dem Geschäftsobjekt ab, mit dem der ObjectDataSource verwendet wird. Wenn der Cache abläuft, ruft die Select -Methode Daten aus dem Geschäftsobjekt ab und speichert die Daten dann erneut zwischen.

Das ObjectDataSource Steuerelement speichert Daten automatisch zwischen, wenn die EnableCaching Eigenschaft auf true festgelegt ist und die CacheDuration Eigenschaft auf einen Wert größer als 0 festgelegt ist. Dies gibt die Anzahl der Sekunden an, die der Cache speichert, bevor der Cacheeintrag verworfen wird. Der Wert 0 gibt einen unendlich langen Cache an.

Sie können die CacheKeyDependency -Eigenschaft festlegen, um eine Abhängigkeit zwischen allen Cacheeinträgen zu erstellen, die ObjectDataSource vom Steuerelement und dem Schlüssel erstellt werden. Sie können alle Cacheeinträge jederzeit programmgesteuert ablaufen, indem Sie den Schlüssel ablaufen. Laufen Sie den Schlüssel ab, indem Sie die Cache.Remove -Methode mit dem aktuellen CacheKeyDependency Wert als Parameter verwenden.

Für jede Kombination der CacheDurationEigenschaften , , CacheExpirationPolicyTypeName, SelectMethodund SelectParameters wird ein eindeutiger Cacheeintrag erstellt. Mehrere ObjectDataSource Steuerelemente können dieselben Cacheeinträge in Szenarien verwenden, in denen daten mit demselben Typ, derselben Methode und denselben Parametern geladen werden.

Gilt für:

Weitere Informationen