다음을 통해 공유


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 컨트롤을 DropDownList 컨트롤 및 DetailsView 제어 합니다. 첫 번째 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 이벤트 및 처리기는 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

세 번째 예제에서는 Northwind 데이터베이스와 상호 작용 하는 데이터 액세스 클래스를 보여 줍니다. 클래스는 LINQ를 사용 하 여 직원 테이블을 쿼리 합니다. 이 예제에서는 LINQ to SQL 클래스는 Northwind 데이터베이스를 나타내고 Employees 테이블에 필요 합니다. 자세한 내용은 방법: 만들 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 컨트롤은 자동으로 데이터를 캐시 때 합니다 EnableCaching 속성이 trueCacheDuration 속성 캐시에 캐시 엔트리 이전의 데이터가 저장 되는 시간 (초) 수를 나타내는 0 보다 큰 값으로 설정 됩니다 삭제 됩니다. 값이 0 무한정 캐시를 나타냅니다.

설정할 수 있습니다 합니다 CacheKeyDependency 속성에서 만든 모든 캐시 항목 간의 종속성을 만들려면는 ObjectDataSource 컨트롤과 키입니다. 하면 만료 될 수 있습니다 모든 캐시 항목을 프로그래밍 방식으로 언제 든 지 키를 만료 하 여 합니다. 키를 사용 하 여 만료 합니다 Cache.Remove 메서드는 현재 CacheKeyDependency 매개 변수로 값입니다.

모든 조합에 대 한 고유 캐시 엔트리 만들어집니다 합니다 CacheDuration, CacheExpirationPolicy, TypeName, SelectMethod, 및 SelectParameters 속성입니다. 여러 ObjectDataSource 컨트롤 같은 캐시 엔트리 시나리오에서 사용할 수 있는 동일한 형식, 메서드 및 매개 변수를 사용 하 여 데이터 로드 합니다.

적용 대상

추가 정보