ObjectDataSource.EnableCaching Eigenschap

Definitie

Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of het ObjectDataSource besturingselement gegevenscache heeft ingeschakeld.

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

Waarde van eigenschap

true als gegevenscache is ingeschakeld voor het besturingselement voor de gegevensbron; anders, false. De standaardwaarde is false.

Uitzonderingen

De EnableCaching eigenschap wordt ingesteld op true wanneer de methode die is opgegeven door de SelectMethod eigenschap een DbDataReader.

Voorbeelden

In de volgende drie voorbeelden ziet u een webpagina, een code-behind-paginaklasse en een gegevenstoegangsklasse waarmee records worden opgehaald uit de tabel Werknemers in de Northwind-database.

In het eerste voorbeeld ziet u een webpagina met twee ObjectDataSource besturingselementen, een DropDownList besturingselement en een DetailsView besturingselement. Het eerste ObjectDataSource besturingselement en het DropDownList besturingselement worden gebruikt om namen van werknemers op te halen en weer te geven uit de database. Het tweede ObjectDataSource besturingselement en het DetailsView besturingselement worden gebruikt om de werknemersrecord op te halen en weer te geven die door de gebruiker is geselecteerd.

Caching is ingeschakeld voor het ObjectDataSource besturingselement. Daarom wordt elke record slechts één keer opgehaald uit de database. De CacheKeyDependency eigenschap is ingesteld op EmployeeDetails, maar elke tekenreekswaarde kan als sleutel werken. De webpagina bevat ook een Button besturingselement waarop de gebruiker kan klikken om de gegevens in de cache te laten verlopen.

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

In het tweede voorbeeld ziet u een handler voor de Load gebeurtenis en een handler voor de Click gebeurtenis van het Button besturingselement. De Load gebeurtenis-handler maakt een cache-item met een sleutel die is ingesteld op de CacheKeyDependency waarde. De Click gebeurtenis-handler verwijdert het cache-item waarvan de sleutel gelijk is aan de CacheKeyDependency waarde. Wanneer het cache-item wordt verwijderd, worden alle gegevens in de cache die afhankelijk zijn van de sleutel verlopen.

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

In het derde voorbeeld ziet u de gegevenstoegangsklasse die communiceert met de Northwind-database. De klasse gebruikt LINQ om een query uit te voeren op de tabel Werknemers. Voor het voorbeeld is een LINQ vereist naar SQL-klasse die de Northwind-database en de tabel Werknemers vertegenwoordigt. Zie Hoe to: LINQ maken voor SQL-klassen in een web-Project voor meer informatie.

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

Opmerkingen

Het ObjectDataSource besturingselement ondersteunt het opslaan van gegevens in cache. Terwijl gegevens in de cache worden opgeslagen, worden aanroepen naar de Select methode gegevens opgehaald uit de cache in plaats van het ObjectDataSource maken van een exemplaar van het bedrijfsobject en het aanroepen van de gegevensmethode. Wanneer de cache verloopt, haalt de Select methode gegevens op uit het bedrijfsobject en slaat de gegevens vervolgens opnieuw in de cache op.

Het ObjectDataSource besturingselement slaat automatisch gegevens in de cache op wanneer de EnableCaching eigenschap is ingesteld true op en de CacheDuration eigenschap is ingesteld op een waarde die groter is dan 0, wat het aantal seconden aangeeft dat de cache gegevens opslaat voordat de cachevermelding wordt verwijderd. Een waarde van 0 geeft een oneindig lange cache aan.

Van toepassing op

Zie ook