次の方法で共有


ObjectDataSource.EnableCaching プロパティ

定義

ObjectDataSource コントロールでデータ キャッシュが有効かどうかを示す値を取得または設定します。

public:
 virtual property bool EnableCaching { bool get(); void set(bool value); };
public virtual bool EnableCaching { get; set; }
member this.EnableCaching : bool with get, set
Public Overridable Property EnableCaching As Boolean

プロパティ値

データ ソース コントロールでデータ キャッシュが有効な場合は true。それ以外の場合は false。 既定値は、false です。

例外

EnableCaching プロパティで指定されたメソッドが SelectMethod を返すと、DbDataReader プロパティが true に設定されます。

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

注釈

コントロールでは ObjectDataSource 、データ キャッシュがサポートされています。 データがキャッシュされている間、メソッドの Select 呼び出しは、ビジネス オブジェクトのインスタンスを作成してそのデータ メソッドを呼び出すのではなく ObjectDataSource 、キャッシュからデータを取得します。 キャッシュの有効期限が切れると、 メソッドは Select ビジネス オブジェクトからデータを取得し、データをもう一度キャッシュします。

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

適用対象

こちらもご覧ください