ObjectDataSource.EnableCaching Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft einen Wert ab, der angibt, ob für das ObjectDataSource-Steuerelement die Zwischenspeicherung von Daten aktiviert ist, oder legt diesen fest.
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
Eigenschaftswert
true
, wenn die Zwischenspeicherung von Daten für das Datenquellen-Steuerelement aktiviert ist, andernfalls false
. Der Standardwert ist false
.
Ausnahmen
Die EnableCaching-Eigenschaft wird auf true
festgelegt, wenn die durch die SelectMethod-Eigenschaft angegebene Methode einen DbDataReader zurückgibt.
Beispiele
Die folgenden drei Beispiele zeigen eine Webseite, eine CodeBehind-Seitenklasse und eine Datenzugriffsklasse, die Datensätze aus der Tabelle Employees in der Northwind-Datenbank abrufen.
Das erste Beispiel zeigt eine Webseite, die zwei ObjectDataSource Steuerelemente enthält, ein DropDownList -Steuerelement und ein DetailsView -Steuerelement. Das erste ObjectDataSource Steuerelement und das DropDownList Steuerelement werden verwendet, um Mitarbeiternamen aus der Datenbank abzurufen und anzuzeigen. Das zweite ObjectDataSource Steuerelement und das DetailsView Steuerelement werden verwendet, um den vom Benutzer ausgewählten Mitarbeiterdatensatz abzurufen und anzuzeigen.
Die Zwischenspeicherung ist für das ObjectDataSource Steuerelement aktiviert. Daher wird jeder Datensatz nur einmal aus der Datenbank abgerufen. Die CacheKeyDependency Eigenschaft ist auf "EmployeeDetails" festgelegt, aber jeder Zeichenfolgenwert kann als Schlüssel verwendet werden. Die Webseite enthält auch ein Button Steuerelement, auf das der Benutzer klicken kann, um die zwischengespeicherten Daten abzulaufen.
<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>
Das zweite Beispiel zeigt einen Handler für das Load -Ereignis und einen Handler für das Click -Ereignis des -Steuerelements Button . Der Load Ereignishandler erstellt ein Cacheelement mit einem Schlüsselsatz für den CacheKeyDependency Wert. Der Click Ereignishandler entfernt das Cacheelement, dessen Schlüssel dem CacheKeyDependency Wert entspricht. Wenn das Cacheelement entfernt wird, sind alle zwischengespeicherten Daten, die vom Schlüssel abhängig sind, abgelaufen.
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
Das dritte Beispiel zeigt die Datenzugriffsklasse, die mit der Northwind-Datenbank interagiert. Die -Klasse verwendet LINQ, um die Employees-Tabelle abzufragen. Das Beispiel erfordert eine LINQ to SQL-Klasse, die die Northwind-Datenbank und die Employees-Tabelle darstellt. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen von LINQ to SQL-Klassen in einem Webprojekt.
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
Hinweise
Das ObjectDataSource Steuerelement unterstützt die Datenzwischenspeicherung. Während daten zwischengespeichert werden, rufen Aufrufe der Select -Methode Daten aus dem Cache ab, anstatt ObjectDataSource eine Instanz des Geschäftsobjekts zu erstellen und dessen Datenmethode aufzurufen. Wenn der Cache abläuft, ruft die Select Methode Daten aus dem Geschäftsobjekt ab und speichert die Daten dann erneut zwischen.
Das ObjectDataSource Steuerelement speichert Daten automatisch zwischen, wenn die EnableCaching -Eigenschaft auf true
festgelegt ist und die CacheDuration -Eigenschaft auf einen Wert größer als 0 festgelegt ist. Dies gibt die Anzahl der Sekunden an, die der Cache daten speichert, bevor der Cacheeintrag verworfen wird. Der Wert 0 gibt einen unendlich langen Cache an.