Aracılığıyla paylaş


ObjectDataSource.CacheKeyDependency Özellik

Tanım

Veri kaynağı denetimi tarafından oluşturulan tüm veri önbelleği nesnelerine bağlı kullanıcı tanımlı anahtar bağımlılığını alır veya ayarlar.

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

Özellik Değeri

tarafından ObjectDataSourceoluşturulan tüm önbellek nesnelerini tanımlayan bir anahtar.

Örnekler

Aşağıdaki üç örnekte bir Web sayfası, arka planda kod içeren bir sayfa sınıfı ve Northwind veritabanındaki Employees tablosundan kayıtları alan bir veri erişim sınıfı gösterilir.

İlk örnekte, iki ObjectDataSource denetim, bir denetim ve bir DropDownList denetim içeren bir Web sayfası gösterilmektedir DetailsView . İlk ObjectDataSource denetim ve denetim, veritabanından DropDownList çalışan adlarını almak ve görüntülemek için kullanılır. İkinci ObjectDataSource denetim ve DetailsView denetim, kullanıcı tarafından seçilen çalışan kaydını almak ve görüntülemek için kullanılır.

Denetim için ObjectDataSource önbelleğe alma etkinleştirildi. Bu nedenle, her kayıt veritabanından yalnızca bir kez alınır. CacheKeyDependency özelliği "EmployeeDetails" olarak ayarlanır, ancak herhangi bir dize değeri anahtar olarak çalışabilir. Web sayfası ayrıca kullanıcının önbelleğe alınan verilerin süresini doldurmak için tıklayabileceği bir Button denetim içerir.

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

İkinci örnekte olay için Load bir işleyici ve denetimin Click olayı için bir işleyici gösterilmektedir Button . Olay işleyicisi Load , anahtar değerine ayarlanmış CacheKeyDependency bir önbellek öğesi oluşturur. Olay Click işleyicisi, anahtarı değere CacheKeyDependency eşit olan önbellek öğesini kaldırır. Önbellek öğesi kaldırıldığında, anahtara bağımlı olan önbelleğe alınan tüm verilerin süresi dolar.

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

Üçüncü örnekte Northwind veritabanıyla etkileşim kuran veri erişim sınıfı gösterilmektedir. sınıfı, Çalışanlar tablosunu sorgulamak için LINQ kullanır. Örnek, Northwind veritabanını ve Employees tablosunu temsil eden bir LINQ to SQL sınıfı gerektirir. Daha fazla bilgi için bkz . Nasıl yapılır: Web Projesinde LINQ to SQL Sınıfları Oluşturma.

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

Açıklamalar

CacheKeyDependency özelliği herhangi bir rastgele dize değerine ayarlanabilir.

Anahtarın süresi dolduğunda tüm önbellek nesnelerinin süresi açıkça dolar. Bu, kendi sayfa kodunuz tarafından ObjectDataSource program aracılığıyla oluşturulan önbellek girdilerini geçersiz kılmanıza olanak tanır.

Denetim, ObjectDataSource veri önbelleğe almayı destekler. Veriler önbelleğe alınırken yöntemine yapılan Select çağrılar, ile birlikte çalışan iş nesnesi ObjectDataSource yerine önbellekten veri alır. Önbelleğin süresi dolduğunda yöntemi, Select iş nesnesinden verileri alır ve ardından verileri yeniden önbelleğe alır.

ObjectDataSource Özellik olarak ayarlandığında ve özellik 0'dan büyük bir değere ayarlandığında true denetim verileri otomatik olarak önbelleğe EnableCaching alır ve CacheDuration bu da önbellek girdisi atilmeden önce önbelleğin verileri depoladığı saniye sayısını gösterir. 0 değeri sonsuz uzun bir önbelleği gösterir.

denetimi ve anahtar tarafından ObjectDataSource oluşturulan tüm önbellek girdileri arasında bağımlılık oluşturmak için özelliğini ayarlayabilirsinizCacheKeyDependency. Anahtarın süresinin dolmasıyla tüm önbellek girdilerinin süresi istediğiniz zaman program aracılığıyla dolabilir. parametresi olarak geçerli CacheKeyDependency değerle yöntemini kullanarak Cache.Remove anahtarın süresinin dolması.

, , CacheExpirationPolicy, SelectMethodTypeNameve SelectParameters özelliklerinin her birleşimi için benzersiz bir önbellek girdisi CacheDurationoluşturulur. Birden çok ObjectDataSource denetim, aynı tür, yöntem ve parametreleri kullanarak veri yükledikleri senaryolarda aynı önbellek girdilerini kullanabilir.

Şunlara uygulanır

Ayrıca bkz.