次の方法で共有


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 によって作成されたすべてのキャッシュ オブジェクトを識別するキー。

次の 3 つの例は、Web ページ、分離コード ページ クラス、および Northwind データベースの Employees テーブルからレコードを取得するデータ アクセス クラスを示しています。

最初の例は、コントロールとコントロールの 2 つの ObjectDataSource コントロールを DropDownList 含む Web ページを DetailsView 示しています。 最初 ObjectDataSource のコントロールとコントロールは DropDownList 、データベースから従業員名を取得して表示するために使用されます。 2 番目 ObjectDataSourceDetailsView コントロールと コントロールは、ユーザーが選択した従業員レコードを取得して表示するために使用されます。

コントロールに対してキャッシュが ObjectDataSource 有効になっています。 したがって、各レコードはデータベースから 1 回だけ取得されます。 プロパティは CacheKeyDependency "EmployeeDetails" に設定されていますが、任意の文字列値をキーとして機能させることができます。 Web ページには、 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>

2 番目の例は、 イベントの Load ハンドラーと、 コントロールの イベントの Click ハンドラーを Button 示しています。 イベント ハンドラーは Load 、キーが値に設定されたキャッシュ項目を 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

3 番目の例は、Northwind データベースと対話するデータ アクセス クラスを示しています。 クラスは LINQ を使用して Employees テーブルのクエリを実行します。 この例では、Northwind データベースと Employees テーブルを表す LINQ to SQL クラスが必要です。 詳細については、「 方法: 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 ビジネス オブジェクトからデータを取得し、データをもう一度キャッシュします。

コントロールはObjectDataSource、 プロパティが にtrue設定されCacheDuration、 プロパティが 0 より大きい値に設定されるとEnableCaching、データを自動的にキャッシュします。これは、キャッシュ エントリが破棄されるまでにキャッシュがデータを格納する秒数を示します。 値 0 は、無限に長いキャッシュを示します。

プロパティを CacheKeyDependency 設定して、コントロールによって作成されたすべてのキャッシュ エントリとキーの間に依存関係を ObjectDataSource 作成できます。 キーの有効期限を切ることで、プログラムですべてのキャッシュ エントリをいつでも期限切れにできます。 パラメーターとして現在CacheKeyDependencyの値を持つ メソッドをCache.Remove使用して、キーを期限切れにします。

、および の各プロパティの組み合わせごとに、一意のCacheDurationSelectMethodCacheExpirationPolicyTypeNameキャッシュ エントリがSelectParameters作成されます。 複数 ObjectDataSource のコントロールは、同じ型、メソッド、およびパラメーターを使用してデータを読み込むシナリオで、同じキャッシュ エントリを使用できます。

適用対象

こちらもご覧ください