ObjectDataSource.CacheKeyDependency Egenskap

Definition

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.

Gäller för

Se även