ObjectDataSource.CacheKeyDependency Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает или задает определяемую пользователем зависимость ключа, связанную со всеми объектами кэша данных, созданными элементом управления источником данных.
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
Значение свойства
Ключ, определяющий все объекты кэша, созданные этим элементом ObjectDataSource.
Примеры
В следующих трех примерах показаны веб-страница, класс страницы программной части и класс доступа к данным, извлекающий записи из таблицы 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 и обработчик события ClickButton элемента управления. Обработчик 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
Комментарии
Свойство CacheKeyDependency можно задать для любого произвольного строкового значения.
Все объекты кэша явно истекают при истечении срока действия ключа. Это позволяет недопустимо создавать записи кэша, созданные программным путем из собственного ObjectDataSource кода страницы.
Элемент управления поддерживает кэширование ObjectDataSource данных. Хотя данные кэшируются, вызовы Select метода извлекают данные из кэша, а не из бизнес-объекта, с которым работает этот ObjectDataSource метод. По истечении срока действия Select кэша метод извлекает данные из бизнес-объекта, а затем кэширует данные снова.
Элемент ObjectDataSource управления автоматически кэширует данные, если EnableCaching свойство задано true , а CacheDuration свойство имеет значение больше 0, что указывает количество секунд, в течение которых кэш сохраняет данные перед удалением записи кэша. Значение 0 указывает бесконечно длинный кэш.
Свойство можно задать CacheKeyDependency для создания зависимости между всеми записями кэша, созданными ObjectDataSource элементом управления и ключом. Срок действия всех записей кэша можно использовать программным способом в любое время, истекая сроком действия ключа. Срок действия ключа с использованием Cache.Remove метода с текущим CacheKeyDependency значением в качестве параметра.
Для каждой комбинации свойств SelectMethodCacheExpirationPolicyTypeNameи SelectParameters свойств создается уникальная запись кэша.CacheDuration Несколько ObjectDataSource элементов управления могут использовать одни и те же записи кэша в сценариях, где они загружают данные с помощью одного типа, метода и параметров.