ObjectDataSource.CacheKeyDependency Eigenschap
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee haalt u een door de gebruiker gedefinieerde sleutelafhankelijkheid op die is gekoppeld aan alle gegevenscacheobjecten die zijn gemaakt door het besturingselement voor de gegevensbron.
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
Waarde van eigenschap
Een sleutel die alle cacheobjecten identificeert die zijn gemaakt door de ObjectDataSource.
Voorbeelden
In de volgende drie voorbeelden ziet u een webpagina, een code-behind-paginaklasse en een gegevenstoegangsklasse waarmee records worden opgehaald uit de tabel Werknemers in de Northwind-database.
In het eerste voorbeeld ziet u een webpagina met twee ObjectDataSource besturingselementen, een DropDownList besturingselement en een DetailsView besturingselement. Het eerste ObjectDataSource besturingselement en het DropDownList besturingselement worden gebruikt om namen van werknemers op te halen en weer te geven uit de database. Het tweede ObjectDataSource besturingselement en het DetailsView besturingselement worden gebruikt om de werknemersrecord op te halen en weer te geven die door de gebruiker is geselecteerd.
Caching is ingeschakeld voor het ObjectDataSource besturingselement. Daarom wordt elke record slechts één keer opgehaald uit de database. De CacheKeyDependency eigenschap is ingesteld op EmployeeDetails, maar elke tekenreekswaarde kan als sleutel werken. De webpagina bevat ook een Button besturingselement waarop de gebruiker kan klikken om de gegevens in de cache te laten verlopen.
<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>
In het tweede voorbeeld ziet u een handler voor de Load gebeurtenis en een handler voor de Click gebeurtenis van het Button besturingselement. De Load gebeurtenis-handler maakt een cache-item met een sleutel die is ingesteld op de CacheKeyDependency waarde. De Click gebeurtenis-handler verwijdert het cache-item waarvan de sleutel gelijk is aan de CacheKeyDependency waarde. Wanneer het cache-item wordt verwijderd, worden alle gegevens in de cache die afhankelijk zijn van de sleutel verlopen.
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
In het derde voorbeeld ziet u de gegevenstoegangsklasse die communiceert met de Northwind-database. De klasse gebruikt LINQ om een query uit te voeren op de tabel Werknemers. Voor het voorbeeld is een LINQ vereist naar SQL-klasse die de Northwind-database en de tabel Werknemers vertegenwoordigt. Zie Hoe to: LINQ maken voor SQL-klassen in een web-Project voor meer informatie.
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
Opmerkingen
De CacheKeyDependency eigenschap kan worden ingesteld op elke willekeurige tekenreekswaarde.
Alle cacheobjecten zijn expliciet verlopen wanneer de sleutel is verlopen. Hiermee kunt u cachevermeldingen die zijn gemaakt door de ObjectDataSource code van uw eigen pagina programmatisch ongeldig maken.
Het ObjectDataSource besturingselement ondersteunt het opslaan van gegevens in cache. Terwijl gegevens in de cache worden opgeslagen, worden aanroepen naar de Select methode gegevens opgehaald uit de cache in plaats van uit het bedrijfsobject waarmee de ObjectDataSource gegevens werken. Wanneer de cache verloopt, haalt de Select methode gegevens op uit het bedrijfsobject en slaat de gegevens vervolgens opnieuw in de cache op.
Het ObjectDataSource besturingselement slaat automatisch gegevens in de cache op wanneer de EnableCaching eigenschap is ingesteld true op en de CacheDuration eigenschap is ingesteld op een waarde die groter is dan 0, wat het aantal seconden aangeeft dat de cache gegevens opslaat voordat de cachevermelding wordt verwijderd. Een waarde van 0 geeft een oneindig lange cache aan.
U kunt de CacheKeyDependency eigenschap instellen om een afhankelijkheid te maken tussen alle cachevermeldingen die door het ObjectDataSource besturingselement en de sleutel worden gemaakt. U kunt alle cachevermeldingen op elk gewenst moment programmatisch laten verlopen door de sleutel te laten verlopen. De sleutel laten verlopen met behulp van de Cache.Remove methode met de huidige CacheKeyDependency waarde als parameter.
Er wordt een unieke cachevermelding gemaakt voor elke combinatie van de CacheDuration, CacheExpirationPolicy, TypeNameen SelectMethodeigenschappen SelectParameters . Meerdere ObjectDataSource besturingselementen kunnen dezelfde cachevermeldingen gebruiken in scenario's waarin ze gegevens laden met hetzelfde type, dezelfde methode en parameters.