ObjectDataSource.EnableCaching Vlastnost

Definice

Získá nebo nastaví hodnotu označující, zda ObjectDataSource má ovládací prvek povoleno ukládání dat do mezipaměti.

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

Hodnota vlastnosti

truepokud je pro ovládací prvek zdroje dat povoleno ukládání dat do mezipaměti; v opačném případě . false Výchozí formát je false.

Výjimky

Vlastnost je nastavena EnableCaching na hodnotu true , když metoda určená SelectMethod vlastností vrátí DbDataReader.

Příklady

Následující tři příklady ukazují webovou stránku, třídu stránky s kódem na pozadí a třídu přístupu k datům, které načítají záznamy z tabulky Employees v databázi Northwind.

První příklad ukazuje webovou stránku, která obsahuje dva ObjectDataSource ovládací prvky, DropDownList ovládací prvek a DetailsView ovládací prvek. První ObjectDataSource ovládací prvek a DropDownList ovládací prvek slouží k načtení a zobrazení jmen zaměstnanců z databáze. Druhý ObjectDataSource ovládací prvek a DetailsView ovládací prvek slouží k načtení a zobrazení záznamu zaměstnance vybraného uživatelem.

Ukládání do mezipaměti je pro ObjectDataSource ovládací prvek povolené. Každý záznam se proto z databáze načte jenom jednou. Vlastnost je nastavená CacheKeyDependency na "EmployeeDetails", ale jako klíč může fungovat jakákoli řetězcová hodnota. Webová stránka obsahuje Button také ovládací prvek, kterým může uživatel kliknutím ukončit platnost dat uložených v mezipaměti.

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

Druhý příklad ukazuje obslužnou rutinu Load pro událost a obslužnou rutinu Click pro událost Button ovládacího prvku. Obslužná rutina Load události vytvoří položku mezipaměti s klíčem nastaveným CacheKeyDependency na hodnotu . Obslužná rutina Click události odebere položku mezipaměti, jejíž klíč se rovná hodnotě CacheKeyDependency . Při odebrání položky mezipaměti vyprší platnost všech dat uložených v mezipaměti, která jsou závislá na klíči.

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

Třetí příklad ukazuje třídu přístupu k datům, která komunikuje s databází Northwind. Třída používá LINQ k dotazování tabulky Employees. Příklad vyžaduje třídu LINQ to SQL, která představuje databázi Northwind a tabulku Employees. Další informace najdete v tématu Postupy: Vytvoření tříd LINQ to SQL ve webovém projektu.

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

Poznámky

Ovládací ObjectDataSource prvek podporuje ukládání dat do mezipaměti. Když jsou data uložená v mezipaměti, volání metody načítá Select data z mezipaměti místo ObjectDataSource vytvoření instance obchodního objektu a volání jeho datové metody. Když platnost mezipaměti vyprší, Select metoda načte data z obchodního objektu a pak je znovu ukládá do mezipaměti.

Ovládací ObjectDataSource prvek automaticky ukládá data do mezipaměti, když EnableCaching je vlastnost nastavena na true hodnotu a CacheDuration vlastnost je nastavena na hodnotu větší než 0, což označuje počet sekund, které mezipaměť ukládá data, než je položka mezipaměti zahozena. Hodnota 0 označuje nekonečně dlouhou mezipaměť.

Platí pro

Viz také