ObjectDataSource.CacheKeyDependency Egenskap
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Hämtar eller anger ett användardefinierat nyckelberoende som är länkat till alla datacacheobjekt som skapas av datakällkontrollen.
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
Egenskapsvärde
En nyckel som identifierar alla cacheobjekt som skapats av ObjectDataSource.
Exempel
Följande tre exempel visar en webbsida, en kod bakom sidklass och en dataåtkomstklass som hämtar poster från tabellen Anställda i Northwind-databasen.
Det första exemplet visar en webbsida som innehåller två ObjectDataSource kontroller, en DropDownList kontroll och en DetailsView kontroll. Den första ObjectDataSource kontrollen och DropDownList kontrollen används för att hämta och visa medarbetarnamn från databasen. Den andra ObjectDataSource kontrollen och DetailsView kontrollen används för att hämta och visa den medarbetarpost som användaren har valt.
Cachelagring är aktiverat för ObjectDataSource kontrollen. Därför hämtas varje post bara en gång från databasen. Egenskapen CacheKeyDependency är inställd på "EmployeeDetails", men alla strängvärden kan fungera som nyckel. Webbsidan innehåller också en Button kontroll som användaren kan klicka på för att förfalla cachelagrade data.
<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>
Det andra exemplet visar en hanterare för Load händelsen och en hanterare för Click kontrollens Button händelse. Händelsehanteraren Load skapar ett cacheobjekt med en nyckel inställd på CacheKeyDependency värdet. Händelsehanteraren Click tar bort det cacheobjekt vars nyckel är lika med CacheKeyDependency värdet. När cacheobjektet tas bort upphör alla cachelagrade data som är beroende av nyckeln att upphöra att gälla.
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
Det tredje exemplet visar dataåtkomstklassen som interagerar med Northwind-databasen. Klassen använder LINQ för att fråga tabellen Anställda. Exemplet kräver en LINQ till SQL-klass som representerar Northwind-databasen och tabellen Anställda. Mer information finns i How to: Create LINQ to SQL Classes in a Web Project.
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
Kommentarer
Egenskapen CacheKeyDependency kan anges till valfritt godtyckligt strängvärde.
Alla cacheobjekt upphör uttryckligen att gälla när nyckeln har upphört att gälla. På så sätt kan du ogiltigförklara cacheposter som skapas av ObjectDataSource från din egen sidkod programmatiskt.
Kontrollen ObjectDataSource stöder datacachelagring. Medan data cachelagras anrop till Select metoden hämtar data från cacheminnet i stället för från affärsobjektet ObjectDataSource som fungerar med. När cacheminnet upphör att gälla Select hämtar metoden data från affärsobjektet och cachelagrar sedan data igen.
Kontrollen ObjectDataSource cachelagrar automatiskt data när EnableCaching egenskapen är inställd på true och CacheDuration egenskapen anges till ett värde större än 0, vilket anger hur många sekunder cacheminnet lagrar data innan cacheposten tas bort. Värdet 0 anger en oändligt lång cache.
Du kan ange egenskapen CacheKeyDependency för att skapa ett beroende mellan alla cacheposter som skapas av ObjectDataSource kontrollen och nyckeln. Du kan när som helst förfalla alla cacheposter programmatiskt genom att förfalla nyckeln. Förfalla nyckeln med hjälp Cache.Remove av metoden med det aktuella CacheKeyDependency värdet som parameter.
En unik cachepost skapas för varje kombination av CacheDurationegenskaperna , CacheExpirationPolicy, TypeName, SelectMethodoch SelectParameters . Flera ObjectDataSource kontroller kan använda samma cacheposter i scenarier där de läser in data med samma typ, metod och parametrar.