Condividi tramite


ObjectDataSource.CacheKeyDependency Proprietà

Definizione

Ottiene o imposta una dipendenza di chiave definita dall'utente collegata a tutti gli oggetti cache dati creati dal controllo origine dati.

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

Valore della proprietà

Chiave che identifica tutti gli oggetti relativi alla cache creati dall'oggetto ObjectDataSource.

Esempio

I tre esempi seguenti illustrano una pagina Web, una classe di pagine code-behind e una classe di accesso ai dati che recupera i record dalla tabella Employees nel database Northwind.

Il primo esempio mostra una pagina Web che contiene due ObjectDataSource controlli, un DropDownList controllo e un DetailsView controllo . Il primo ObjectDataSource controllo e il DropDownList controllo vengono usati per recuperare e visualizzare i nomi dei dipendenti dal database. Il secondo ObjectDataSource controllo e il DetailsView controllo vengono usati per recuperare e visualizzare il record dipendente selezionato dall'utente.

La memorizzazione nella cache è abilitata per il ObjectDataSource controllo . Di conseguenza, ogni record viene recuperato una sola volta dal database. La CacheKeyDependency proprietà è impostata su "EmployeeDetails", ma qualsiasi valore stringa può funzionare come chiave. La pagina Web include anche un Button controllo che l'utente può fare clic per scadere i dati memorizzati nella cache.

<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>

Il secondo esempio mostra un gestore per l'evento Load e un gestore per l'evento Click del Button controllo. Il Load gestore eventi crea un elemento della cache con una chiave impostata sul CacheKeyDependency valore . Il Click gestore eventi rimuove l'elemento della cache la CacheKeyDependency cui chiave è uguale al valore . Quando l'elemento della cache viene rimosso, tutti i dati memorizzati nella cache dipendenti dalla chiave sono scaduti.

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

Il terzo esempio mostra la classe di accesso ai dati che interagisce con il database Northwind. La classe usa LINQ per eseguire una query sulla tabella Employees. L'esempio richiede una classe LINQ to SQL che rappresenta il database Northwind e la tabella Employees. Per altre informazioni, vedere Procedura: Creare classi LINQ to SQL in un progetto Web.

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

Commenti

La CacheKeyDependency proprietà può essere impostata su qualsiasi valore stringa arbitrario.

Tutti gli oggetti relativi alla cache scadono in modo esplicito quando scade la chiave. In questo modo è possibile invalidare le voci della cache create dal ObjectDataSource codice della propria pagina a livello di codice.

Il controllo supporta la ObjectDataSource memorizzazione nella cache dei dati. Mentre i dati vengono memorizzati nella cache, le chiamate al Select metodo recuperano i dati dalla cache anziché dall'oggetto ObjectDataSource business usato da . Alla scadenza della cache, il Select metodo recupera i dati dall'oggetto business e quindi memorizza nuovamente nella cache i dati.

Il ObjectDataSource controllo memorizza automaticamente nella cache i dati quando la EnableCaching proprietà è impostata su true e la CacheDuration proprietà è impostata su un valore maggiore di 0, che indica il numero di secondi in cui la cache archivia i dati prima che la voce della cache venga eliminata. Il valore 0 indica una cache infinitamente lunga.

È possibile impostare la CacheKeyDependency proprietà per creare una dipendenza tra tutte le voci della cache create dal ObjectDataSource controllo e dalla chiave. È possibile scadere tutte le voci della cache a livello di codice in qualsiasi momento scadendo la chiave. Scadere la chiave usando il Cache.Remove metodo con il valore corrente CacheKeyDependency come parametro .

Viene creata una voce di cache univoca per ogni combinazione delle CacheDurationproprietà , CacheExpirationPolicy, TypeName, SelectMethode SelectParameters . Più ObjectDataSource controlli possono usare le stesse voci della cache negli scenari in cui caricano i dati usando lo stesso tipo, metodo e parametri.

Si applica a

Vedi anche