Partager via


ObjectDataSource.CacheKeyDependency Propriété

Définition

Obtient ou définit une dépendance de clé définie par l’utilisateur liée à tous les objets de cache de données créés par le contrôle de source de données.

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

Valeur de propriété

Clé qui identifie tous les objets de cache créés par le ObjectDataSource.

Exemples

Les trois exemples suivants montrent une page Web, une classe de page code-behind et une classe d’accès aux données qui récupèrent des enregistrements de la table Employees dans la base de données Northwind.

Le premier exemple montre une page Web qui contient deux ObjectDataSource contrôles, un DropDownList contrôle et un DetailsView contrôle. Le premier ObjectDataSource contrôle et le DropDownList contrôle sont utilisés pour récupérer et afficher les noms des employés à partir de la base de données. Le deuxième ObjectDataSource contrôle et le DetailsView contrôle sont utilisés pour récupérer et afficher l’enregistrement de l’employé sélectionné par l’utilisateur.

La mise en cache est activée pour le ObjectDataSource contrôle. Par conséquent, chaque enregistrement n’est récupéré qu’une seule fois à partir de la base de données. La CacheKeyDependency propriété est définie sur « EmployeeDetails », mais toute valeur de chaîne peut fonctionner comme clé. La page Web inclut également un Button contrôle que l’utilisateur peut cliquer pour expirer les données mises en 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>

Le deuxième exemple montre un gestionnaire pour l’événement Load et un gestionnaire pour l’événement Click du Button contrôle. Le Load gestionnaire d’événements crée un élément de cache avec une clé définie sur la CacheKeyDependency valeur. Le Click gestionnaire d’événements supprime l’élément de cache dont la clé est égale à la CacheKeyDependency valeur. Lorsque l’élément de cache est supprimé, toutes les données mises en cache dépendantes de la clé ont expiré.

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

Le troisième exemple montre la classe d’accès aux données qui interagit avec la base de données Northwind. La classe utilise LINQ pour interroger la table Employees. L’exemple nécessite une classe LINQ to SQL qui représente la base de données Northwind et la table Employees. Pour plus d’informations, consultez How to : Create LINQ to SQL Classes in a 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

Remarques

La CacheKeyDependency propriété peut être définie sur n’importe quelle valeur de chaîne arbitraire.

Tous les objets de cache ont expiré explicitement lorsque la clé a expiré. Cela vous permet d’invalider les entrées de cache créées par le ObjectDataSource code de votre propre page par programmation.

Le ObjectDataSource contrôle prend en charge la mise en cache des données. Pendant que les données sont mises en cache, les appels à la Select méthode récupèrent des données à partir du cache plutôt qu’à partir de l’objet métier avec lequel fonctionnent les ObjectDataSource données. Lorsque le cache expire, la Select méthode récupère les données de l’objet métier, puis met à nouveau en cache les données.

Le ObjectDataSource contrôle met automatiquement en cache les données lorsque la EnableCaching propriété est définie true et que la CacheDuration propriété est définie sur une valeur supérieure à 0, ce qui indique le nombre de secondes pendant lesquelles le cache stocke les données avant l’abandon de l’entrée du cache. La valeur 0 indique un cache infiniment long.

Vous pouvez définir la CacheKeyDependency propriété pour créer une dépendance entre toutes les entrées de cache créées par le ObjectDataSource contrôle et la clé. Vous pouvez expirer toutes les entrées du cache par programmation à tout moment en arrivant à expiration de la clé. Expirez la clé à l’aide de la Cache.Remove méthode avec la valeur actuelle CacheKeyDependency comme paramètre.

Une entrée de cache unique est créée pour chaque combinaison des propriétés , , CacheExpirationPolicyTypeNameet SelectMethodSelectParameters des CacheDurationpropriétés. Plusieurs ObjectDataSource contrôles peuvent utiliser les mêmes entrées de cache dans les scénarios où ils chargent des données à l’aide du même type, méthode et paramètres.

S’applique à

Voir aussi