ObjectDataSource.EnableCaching ObjectDataSource.EnableCaching ObjectDataSource.EnableCaching ObjectDataSource.EnableCaching Property

Définition

Obtient ou définit une valeur indiquant si la mise en cache de données du contrôle ObjectDataSource est activée.Gets or sets a value indicating whether the ObjectDataSource control has data caching enabled.

public:
 virtual property bool EnableCaching { bool get(); void set(bool value); };
public virtual bool EnableCaching { get; set; }
member this.EnableCaching : bool with get, set
Public Overridable Property EnableCaching As Boolean

Valeur de propriété

true si la mise en cache est activée pour le contrôle de source de données ; sinon, false.true if data caching is enabled for the data source control; otherwise, false. La valeur par défaut est false.The default is false.

Exceptions

La propriété EnableCaching a la valeur true lorsque la méthode spécifiée par la propriété SelectMethod retourne DbDataReader.The EnableCaching property is set to true when the method specified by the SelectMethod property returns a DbDataReader.

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ère des enregistrements de la table Employees dans la base de données Northwind.The following three examples show a Web page, a code-behind page class, and a data-access class that retrieve records from the Employees table in the Northwind database.

Le premier exemple montre une page Web qui contient deux ObjectDataSource contrôles, un DropDownList contrôle et un DetailsView contrôle.The first example shows a Web page that contains two ObjectDataSource controls, a DropDownList control, and a DetailsView control. 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.The first ObjectDataSource control and the DropDownList control are used to retrieve and display employee names from the database. Le deuxième ObjectDataSource contrôle et le DetailsView contrôle sont utilisés pour récupérer et afficher l’enregistrement d’employé qui est sélectionné par l’utilisateur.The second ObjectDataSource control and the DetailsView control are used to retrieve and display the employee record that is selected by the user.

La mise en cache est ObjectDataSource activée pour le contrôle.Caching is enabled for the ObjectDataSource control. Par conséquent, chaque enregistrement n’est récupéré qu’une seule fois à partir de la base de données.Therefore, each record is retrieved only one time from the database. La CacheKeyDependency propriété est définie sur «EmployeeDetails», mais toute valeur de chaîne peut fonctionner comme clé.The CacheKeyDependency property is set to "EmployeeDetails", but any string value can work as the key. La page Web comprend également un Button contrôle sur lequel l’utilisateur peut cliquer pour faire expirer les données mises en cache.The Web page also includes a Button control that the user can click to expire the cached data.

<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' Load événement et un gestionnaire pour l' Click événement du Button contrôle.The second example shows a handler for the Load event and a handler for the Click event of the Button control. Le Load gestionnaire d’événements crée un élément de cache avec une clé définie CacheKeyDependency sur la valeur.The Load event handler creates a cache item with a key set to the CacheKeyDependency value. Le Click gestionnaire d’événements supprime l’élément de cache dont la clé est CacheKeyDependency égale à la valeur.The Click event handler removes the cache item whose key is equal to the CacheKeyDependency value. Lorsque l’élément de cache est supprimé, toutes les données mises en cache qui dépendent de la clé ont expiré.When the cache item is removed, all the cached data that is dependent on the key is expired.

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.The third example shows the data access class that interacts with the Northwind database. La classe utilise LINQ pour interroger la table Employees.The class uses LINQ to query the Employees table. L’exemple requiert une classe LINQ to SQL qui représente la base de données Northwind et la table Employees.The example requires a LINQ to SQL class that represents the Northwind database and the Employees table. Pour plus d’informations, consultez Guide pratique pour Créer des classes LINQ to SQL dans un projetWeb.For more information, see 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

Le ObjectDataSource contrôle prend en charge la mise en cache des données.The ObjectDataSource control supports data caching. Pendant que les données sont mises en cache, Select les appels à la méthode récupèrent les données ObjectDataSource du cache plutôt que la création d’une instance de l’objet métier et l’appel de sa méthode de données.While data is cached, calls to the Select method retrieve data from the cache rather than the ObjectDataSource creating an instance of the business object and calling its data method. 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.When the cache expires, the Select method retrieves data from the business object, and then caches the data again.

Le ObjectDataSource contrôle met automatiquement en cache les données EnableCaching lorsque la propriété a true la valeur CacheDuration et que la 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’entrée du cache. est ignoré.The ObjectDataSource control automatically caches data when the EnableCaching property is set to true and the CacheDuration property is set to a value greater than 0, which indicates the number of seconds that the cache stores data before the cache entry is discarded. La valeur 0 indique un cache à durée illimitée.A value of 0 indicates an infinitely long cache.

S’applique à

Voir aussi