共用方式為


ObjectDataSource.CacheKeyDependency 屬性

定義

取得或設定使用者定義的索引鍵相依性,連結至資料來源控制項所建立的所有資料快取物件。

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

屬性值

索引鍵,識別 ObjectDataSource 建立的所有快取物件。

範例

下列三個範例顯示網頁、程序代碼後置頁面類別,以及從 Northwind 資料庫中 Employees 數據表擷取記錄的數據存取類別。

第一個範例顯示包含兩ObjectDataSource個控件、一個控件和一個DropDownListDetailsView控件的網頁。 第一個 ObjectDataSource 控件和 DropDownList 控件是用來擷取和顯示資料庫中的員工名稱。 第二 ObjectDataSource 個控件和 DetailsView 控件是用來擷取和顯示使用者所選取的員工記錄。

控件已啟用 ObjectDataSource 快取。 因此,每個記錄只會從資料庫擷取一次。 屬性 CacheKeyDependency 會設定為 「EmployeeDetails」,但任何字串值都可以當做索引鍵運作。 網頁也包含 Button 控件,使用者可以按兩下以讓快取的數據過期。

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

第二個範例顯示 事件的處理程式Load,以及控件事件的Button處理程式ClickLoad事件處理程式會建立快取專案,並將索引鍵設定為 CacheKeyDependency 值。 Click事件處理程式會移除索引鍵等於CacheKeyDependency值的快取專案。 拿掉快取專案時,相依於密鑰的所有快取數據都會過期。

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

第三個範例顯示與 Northwind 資料庫互動的數據存取類別。 類別會使用LINQ查詢 Employees 資料表。 此範例需要 LINQ to SQL 類別,代表 Northwind 資料庫和 Employees 數據表。 如需詳細資訊,請參閱 如何:在 Web 專案中建立 LINQ to SQL 類別

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

備註

屬性 CacheKeyDependency 可以設定為任何任意字串值。

當索引鍵過期時,所有快取的物件也會明確過期。 這可讓您以程序設計方式使 所 ObjectDataSource 建立的快取專案失效。

控件 ObjectDataSource 支持數據快取。 快取數據時,呼叫 Select 方法會從快取中擷取數據,而不是從 所使用的商務物件 ObjectDataSource 擷取數據。 當快取過期時, Select 方法會從商務物件擷取數據,然後再次快取數據。

當 屬性設定為 trueCacheDuration 屬性設定為大於 0 的值時EnableCaching,控件ObjectDataSource會自動快取數據,這表示快取在捨棄快取專案之前儲存數據的秒數。 值為 0 表示無限長快取。

您可以設定 CacheKeyDependency 屬性,以在控件和索引鍵所 ObjectDataSource 建立的所有快取項目之間建立相依性。 您可以藉由過期金鑰,隨時以程式設計方式將所有快取專案到期。 使用 Cache.Remove 方法搭配目前 CacheKeyDependency 值做為 參數,讓密鑰過期。

系統會針對 、、TypeNameCacheExpirationPolicySelectMethodSelectParameters 屬性的每個組合建立唯一的CacheDuration快取專案。 在使用相同類型、方法和參數載入數據的案例中,多個 ObjectDataSource 控件可以使用相同的快取專案。

適用於

另請參閱