ObjectDataSource.EnableCaching Właściwość

Definicja

Pobiera lub ustawia wartość wskazującą, czy kontrolka ObjectDataSource ma włączone buforowanie danych.

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

Wartość właściwości

true jeśli buforowanie danych jest włączone dla kontroli źródła danych; w przeciwnym razie , false. Wartość domyślna to false.

Wyjątki

Właściwość EnableCaching jest ustawiana na true wartość , gdy metoda określona SelectMethod przez właściwość zwraca wartość DbDataReader.

Przykłady

W poniższych trzech przykładach pokazano stronę sieci Web, klasę stron za kodem i klasę dostępu do danych, która pobiera rekordy z tabeli Employees w bazie danych Northwind.

Pierwszy przykład przedstawia stronę sieci Web zawierającą dwie ObjectDataSource kontrolki, kontrolkę DropDownList i kontrolkę DetailsView . Pierwsza ObjectDataSource kontrolka i kontrolka DropDownList są używane do pobierania i wyświetlania nazw pracowników z bazy danych. Druga ObjectDataSource kontrolka i kontrolka DetailsView służą do pobierania i wyświetlania rekordu pracownika wybranego przez użytkownika.

Buforowanie jest włączone dla kontrolki ObjectDataSource . W związku z tym każdy rekord jest pobierany tylko jeden raz z bazy danych. Właściwość jest ustawiona CacheKeyDependency na wartość "EmployeeDetails", ale dowolna wartość ciągu może działać jako klucz. Strona sieci Web zawiera również kontrolkę Button , którą użytkownik może kliknąć, aby wygasnąć buforowane dane.

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

W drugim przykładzie pokazano procedurę obsługi dla Load zdarzenia i procedurę obsługi zdarzeń Click kontrolki Button . Procedura Load obsługi zdarzeń tworzy element pamięci podręcznej z kluczem ustawionym na CacheKeyDependency wartość. Procedura Click obsługi zdarzeń usuwa element pamięci podręcznej, którego klucz jest równy CacheKeyDependency wartości. Po usunięciu elementu pamięci podręcznej wszystkie buforowane dane zależne od klucza wygasły.

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

Trzeci przykład przedstawia klasę dostępu do danych, która współdziała z bazą danych Northwind. Klasa używa linQ do wykonywania zapytań względem tabeli Employees. W przykładzie jest wymagana klasa LINQ to SQL reprezentująca bazę danych Northwind i tabelę Employees. Aby uzyskać więcej informacji, zobacz How to: Create LINQ to SQL Classes in a Web Project (Instrukcje: tworzenie klas LINQ to SQL w projekcie internetowym).

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

Uwagi

Kontrolka ObjectDataSource obsługuje buforowanie danych. Gdy dane są buforowane, wywołania Select metody pobierają dane z pamięci podręcznej zamiast ObjectDataSource tworzenia wystąpienia obiektu biznesowego i wywoływania metody danych. Gdy pamięć podręczna Select wygaśnie, metoda pobiera dane z obiektu biznesowego, a następnie ponownie buforuje dane.

Kontrolka ObjectDataSource automatycznie buforuje dane, gdy EnableCaching właściwość jest ustawiona na true , a CacheDuration właściwość jest ustawiona na wartość większą niż 0, co wskazuje liczbę sekund przechowywania danych przez pamięć podręczną przed odrzuceniem wpisu pamięci podręcznej. Wartość 0 oznacza nieskończenie długą pamięć podręczną.

Dotyczy

Zobacz też