Bagikan melalui


ObjectDataSource.CacheKeyDependency Properti

Definisi

Mendapatkan atau mengatur dependensi kunci yang ditentukan pengguna yang ditautkan ke semua objek cache data yang dibuat oleh kontrol sumber data.

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

Nilai Properti

Kunci yang mengidentifikasi semua objek cache yang dibuat oleh ObjectDataSource.

Contoh

Tiga contoh berikut ini memperlihatkan halaman Web, kelas halaman di belakang kode, dan kelas akses data yang mengambil rekaman dari tabel Karyawan di database Northwind.

Contoh pertama memperlihatkan halaman Web yang berisi dua ObjectDataSource kontrol, DropDownList kontrol, dan DetailsView kontrol. Kontrol pertama ObjectDataSource dan DropDownList kontrol digunakan untuk mengambil dan menampilkan nama karyawan dari database. Kontrol kedua ObjectDataSource dan DetailsView kontrol digunakan untuk mengambil dan menampilkan rekaman karyawan yang dipilih oleh pengguna.

Penembolokan diaktifkan untuk ObjectDataSource kontrol. Oleh karena itu, setiap rekaman hanya diambil satu kali dari database. Properti CacheKeyDependency diatur ke "EmployeeDetails", tetapi nilai string apa pun dapat berfungsi sebagai kunci. Halaman Web juga menyertakan Button kontrol yang dapat diklik pengguna untuk kedaluwarsa data yang di-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>

Contoh kedua menunjukkan handler untuk Load peristiwa dan handler untuk Click peristiwa Button kontrol. Penanganan Load aktivitas membuat item cache dengan kunci yang diatur ke CacheKeyDependency nilai . Penanganan Click aktivitas menghapus item cache yang kuncinya sama dengan CacheKeyDependency nilai. Saat item cache dihapus, semua data cache yang bergantung pada kunci kedaluwarsa.

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

Contoh ketiga menunjukkan kelas akses data yang berinteraksi dengan database Northwind. Kelas menggunakan LINQ untuk mengkueri tabel Karyawan. Contohnya memerlukan kelas LINQ ke SQL yang mewakili database Northwind dan tabel Karyawan. Untuk informasi selengkapnya, lihat Cara: Membuat LINQ ke Kelas SQL di Proyek 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

Keterangan

Properti CacheKeyDependency dapat diatur ke nilai string arbitrer apa pun.

Semua objek cache secara eksplisit kedaluwarsa saat kunci kedaluwarsa. Ini memungkinkan Anda untuk membatalkan entri cache yang dibuat oleh ObjectDataSource dari kode halaman Anda sendiri secara terprogram.

Kontrol ObjectDataSource mendukung penembolokan data. Saat data di-cache, panggilan ke Select metode mengambil data dari cache daripada dari objek bisnis yang ObjectDataSource bekerja dengannya. Ketika cache kedaluwarsa, Select metode mengambil data dari objek bisnis, lalu cache data lagi.

Kontrol ObjectDataSource secara otomatis menyimpan data saat EnableCaching properti diatur ke true dan CacheDuration properti diatur ke nilai yang lebih besar dari 0, yang menunjukkan jumlah detik cache menyimpan data sebelum entri cache dibuang. Nilai 0 menunjukkan cache yang sangat panjang.

Anda dapat mengatur CacheKeyDependency properti untuk membuat dependensi antara semua entri cache yang dibuat oleh ObjectDataSource kontrol dan kunci. Anda dapat kedaluwarsa semua entri cache secara terprogram kapan saja dengan kedaluwarsa kunci. Kedaluwarsa kunci dengan menggunakan Cache.Remove metode dengan nilai saat ini CacheKeyDependency sebagai parameter .

Entri cache unik dibuat untuk setiap kombinasi CacheDurationproperti , , CacheExpirationPolicyTypeName, SelectMethod, dan SelectParameters . Beberapa ObjectDataSource kontrol dapat menggunakan entri cache yang sama dalam skenario di mana mereka memuat data menggunakan jenis, metode, dan parameter yang sama.

Berlaku untuk

Lihat juga