ObjectDataSource.EnableCaching Свойство

Определение

Возвращает или задает значение позволяющее определить, включено ли кэширование для элемента управления ObjectDataSource.

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

Значение свойства

Значение true, если кэширование данных для элемента управления источником данных включено; в противном случае — значение false. Значение по умолчанию — false.

Исключения

Свойству EnableCaching присваивается значение true, если метод, заданный свойством SelectMethod возвращает DbDataReader.

Примеры

В следующих трех примерах показана веб-страница, класс страницы с кодом программной части и класс доступа к данным, которые извлекают записи из таблицы Employees в базе данных Northwind.

В первом примере показана веб-страница, содержащая два ObjectDataSource элемента управления: DropDownList элемент управления и DetailsView элемент управления . Первый ObjectDataSource элемент управления и DropDownList элемент управления используются для получения и отображения имен сотрудников из базы данных. Второй ObjectDataSource элемент управления и DetailsView элемент управления используются для получения и отображения записи сотрудника, выбранной пользователем.

Для элемента управления включено кэширование ObjectDataSource . Таким образом, каждая запись извлекается из базы данных только один раз. Для CacheKeyDependency свойства задано значение EmployeeDetails, но в качестве ключа может работать любое строковое значение. Веб-страница также содержит Button элемент управления, который пользователь может щелкнуть, чтобы истечь срок действия кэшированных данных.

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

Во втором примере показан обработчик для Load события и обработчик для Click события Button элемента управления . Обработчик Load событий создает элемент кэша со значением CacheKeyDependency ключа. Обработчик Click событий удаляет элемент кэша, ключ которого равен значению CacheKeyDependency . При удалении элемента кэша срок действия всех кэшированных данных, зависящих от ключа, истекает.

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

В третьем примере показан класс доступа к данным, взаимодействующий с базой данных Northwind. Класс использует LINQ для запроса таблицы Employees. Для этого примера требуется класс LINQ to SQL, представляющий базу данных Northwind и таблицу Employees. Дополнительные сведения см. в разделе Практическое руководство. Создание классов LINQ to SQL в веб-проекте.

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

Комментарии

Элемент ObjectDataSource управления поддерживает кэширование данных. Пока данные кэшируются, вызовы Select метода извлекают данные из кэша, а не ObjectDataSource создают экземпляр бизнес-объекта и вызывают его метод данных. По истечении срока действия кэша Select метод извлекает данные из бизнес-объекта, а затем снова кэширует данные.

Элемент ObjectDataSource управления автоматически кэширует данные, если свойству EnableCaching присвоено значение true , а CacheDuration свойству присваивается значение больше 0, указывающее время в секундах, в течение которого кэш хранит данные до удаления записи кэша. Значение 0 указывает на бесконечно длинный кэш.

Применяется к

См. также раздел