ObjectDataSource.EnableCaching Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá nebo nastaví hodnotu urč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 správu zdrojů dat povoleno ukládání dat do mezipaměti; v opačném případě . false Výchozí hodnota je false.
Výjimky
Vlastnost EnableCaching je nastavena, pokud true metoda určená SelectMethod vlastností vrátí DbDataReaderhodnotu .
Příklady
Následující tři příklady ukazují webovou stránku, třídu stránky s kódem a třídu přístupu k datům, která načítá 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. ObjectDataSource Druhý 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 ObjectDataSource mezipaměti je pro ovládací prvek povolené. Každý záznam se proto z databáze načte jen jednou. Vlastnost CacheKeyDependency je nastavena na EmployeeDetails, ale jakákoli řetězcová hodnota může fungovat jako klíč. Webová stránka obsahuje Button také ovládací prvek, na který může uživatel kliknout a 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 události Load a obslužnou rutinu pro Click 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 . Po 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í na tabulku Employees. Příklad vyžaduje třídu LINQ to SQL, která představuje databázi Northwind a tabulku Employees. Další informace naleznete 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. Zatímco jsou data uložená v mezipaměti, volání Select metody načítají data z mezipaměti místo ObjectDataSource vytvoření instance obchodního objektu a volání metody dat. Po vypršení Select platnosti mezipaměti metoda načte data z obchodního objektu a pak data znovu ukládá do mezipaměti.
Ovládací ObjectDataSource prvek automaticky ukládá data do mezipaměti, když EnableCaching je vlastnost nastavena true a CacheDuration vlastnost je nastavena na hodnotu větší než 0, což označuje počet sekund, po které mezipaměť ukládá data před zahozením položky mezipaměti. Hodnota 0 označuje nekonečně dlouhou mezipaměť.