ObjectDataSource.CacheKeyDependency Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Obtient ou définit une dépendance de clé définie par l'utilisateur qui est liée à tous les objets du 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 du cache créés par ObjectDataSource.
Exemples
Les trois exemples suivants illustrent 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 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 d’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 de la base de données. La CacheKeyDependency propriété est définie sur « EmployeeDetails », mais n’importe quelle valeur de chaîne peut fonctionner comme clé. La page Web inclut également un Button contrôle sur lequel l’utilisateur peut cliquer pour faire 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 qui dépendent 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 Guide pratique pour créer des classes LINQ to SQL dans un projet 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
Remarques
La CacheKeyDependency propriété peut être définie sur n’importe quelle valeur de chaîne arbitraire.
Tous les objets du cache expirent explicitement lorsque la clé expire. Cela vous permet d’invalider les entrées de cache créées par le ObjectDataSource à partir de votre propre code de page par programmation.
Le ObjectDataSource contrôle prend en charge la mise en cache des données. Lorsque les données sont mises en cache, les appels à la Select méthode récupèrent des données à partir du cache plutôt que de l’objet métier avec lequel ObjectDataSource fonctionne. Lorsque le cache expire, la Select méthode récupère les données de l’objet métier, puis les met à nouveau en cache.
Le ObjectDataSource contrôle met automatiquement en cache les données lorsque la EnableCaching propriété est définie sur 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 que l’entrée du cache ne soit ignorée. 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 faire expirer toutes les entrées du cache par programmation à tout moment en faisant expirer 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 CacheDurationpropriétés , CacheExpirationPolicy, TypeName, SelectMethodet SelectParameters . Plusieurs ObjectDataSource contrôles peuvent utiliser les mêmes entrées de cache dans des scénarios où ils chargent des données en utilisant le même type, la même méthode et les mêmes paramètres.