ObjectDataSource.CacheKeyDependency Tulajdonság

Definíció

Lekéri vagy beállít egy felhasználó által definiált kulcsfüggőséget, amely az adatforrás-vezérlő által létrehozott összes adatgyorsítótár-objektumhoz kapcsolódik.

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

Tulajdonság értéke

A kulcs, amely azonosítja az összes gyorsítótár-objektumot, amelyet a ObjectDataSource.

Példák

Az alábbi három példa egy weblapot, egy kód mögötti laposztályt és egy adatelérési osztályt mutat be, amely rekordokat kér le a Northwind-adatbázis Alkalmazottak táblájából.

Az első példa egy weblapot mutat be, amely két ObjectDataSource vezérlőt, egy vezérlőt DropDownList és egy vezérlőt DetailsView tartalmaz. Az első ObjectDataSource vezérlő és a DropDownList vezérlő az alkalmazottak nevét kéri le és jeleníti meg az adatbázisból. A második ObjectDataSource vezérlő és a DetailsView vezérlő a felhasználó által kiválasztott alkalmazotti rekord lekérésére és megjelenítésére szolgál.

A vezérlő gyorsítótárazása engedélyezve ObjectDataSource van. Ezért minden rekord csak egyszer lesz lekérve az adatbázisból. A CacheKeyDependency tulajdonság "EmployeeDetails" értékre van állítva, de bármely sztringérték kulcsként működhet. A weblap egy vezérlőt Button is tartalmaz, amellyel a felhasználó rákattinthat a gyorsítótárazott adatok lejáratához.

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

A második példa az Load esemény kezelője és a Click vezérlő eseményének kezelője Button . Az Load eseménykezelő létrehoz egy gyorsítótár-elemet az értékre CacheKeyDependency beállított kulccsal. Az Click eseménykezelő eltávolítja azt a gyorsítótárelemet, amelynek a kulcsa megegyezik az CacheKeyDependency értékkel. A gyorsítótárelem eltávolításakor a kulcstól függő összes gyorsítótárazott adat lejárt.

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

A harmadik példa a Northwind-adatbázissal interakcióba lépő adatelérési osztályt mutatja be. Az osztály a LINQ használatával kérdezi le az Alkalmazottak táblát. A példához linq to SQL osztály szükséges, amely a Northwind adatbázist és az Alkalmazottak táblát jelöli. További információ: Hogyan is: LINQ létrehozása SQL-osztályokhoz webes Project.

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

Megjegyzések

A CacheKeyDependency tulajdonság tetszőleges sztringértékre állítható be.

A kulcs lejártával minden gyorsítótár-objektum kifejezetten lejárt. Ez lehetővé teszi a saját oldalkódból programozott módon létrehozott ObjectDataSource gyorsítótár-bejegyzések érvénytelenítését.

A ObjectDataSource vezérlő támogatja az adatok gyorsítótárazását. Miközben az adatok gyorsítótárazva lesznek, a Select metódus hívásai a gyorsítótárból kérik le az adatokat, nem pedig abból az üzleti objektumból, amellyel a ObjectDataSource rendszer dolgozik. Amikor a gyorsítótár lejár, a Select metódus lekéri az adatokat az üzleti objektumból, majd újra gyorsítótárazza az adatokat.

A ObjectDataSource vezérlő automatikusan gyorsítótárazza az adatokat a EnableCaching tulajdonság beállításakor true , és a CacheDuration tulajdonság értéke 0-nál nagyobb, ami azt jelzi, hogy a gyorsítótár hány másodpercig tárolja az adatokat a gyorsítótár bejegyzésének elvetése előtt. A 0 érték végtelenül hosszú gyorsítótárat jelöl.

A tulajdonságot úgy is beállíthatja CacheKeyDependency , hogy függőséget hozzon létre a vezérlő és a ObjectDataSource kulcs által létrehozott összes gyorsítótár-bejegyzés között. A kulcs lejáratával az összes gyorsítótár-bejegyzést programozott módon bármikor le lehet járni. A kulcs lejáratához használja a metódust az Cache.Remove aktuális CacheKeyDependency értékkel paraméterként.

Létrejön egy egyedi gyorsítótárbejegyzés a CacheDuration, CacheExpirationPolicy, , TypeNameSelectMethodés SelectParameters tulajdonságok minden kombinációjához. Több ObjectDataSource vezérlő is használhatja ugyanazokat a gyorsítótárbejegyzéseket olyan helyzetekben, amikor ugyanazzal a típussal, módszerrel és paraméterekkel töltik be az adatokat.

A következőre érvényes:

Lásd még