다음을 통해 공유


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 컨트롤, 컨트롤 및 DetailsView 컨트롤을 포함 하는 DropDownList 웹 페이지를 보여 줍니다. 첫 번째 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 처리기와 컨트롤의 ClickButton 이벤트에 대 한 처리기를 보여줍니다. 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를 사용하여 Employees 테이블을 쿼리합니다. 이 예제에서는 Northwind 데이터베이스 및 Employees 테이블을 나타내는 LINQ to SQL 클래스가 필요합니다. 자세한 내용은 방법: 웹 프로젝트에서 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 설정 trueCacheDuration 되고 속성이 0보다 큰 값으로 설정되면 컨트롤이 자동으로 데이터를 EnableCaching 캐시합니다. 이는 캐시 항목이 삭제되기 전에 캐시가 데이터를 저장하는 시간(초)을 나타냅니다. 값 0은 무한히 긴 캐시를 나타냅니다.

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

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

적용 대상

추가 정보