LinqDataSource 控件为您提供了一种将数据控件连接到多种数据源的方法,其中包括数据库数据、数据源类和内存中集合。通过使用LinqDataSource 控件,您可以针对所有这些类型的数据源指定类似于数据库检索的任务(选择、筛选、分组和排序)。可以指定针对数据库表的修改任务(更新、删除和插入)。
可以将 LinqDataSource 控件连接到存储在公共字段或属性中的任何类型的数据集合。对于所有数据源来说,用于执行数据操作的声明性标记和代码都是相同的。当您与数据库表中的数据或数据集合(与数组类似)中的数据进行交互时,不必使用不同的语法。
有关 LinqDataSource 控件的介绍,请参见演练:使用 LinqDataSource 和 DetailsView 控件检索、更新、插入和删除数据。
连接到数据库中的数据
当您与数据库中的数据进行交互时,不会将 LinqDataSource 控件直接连接到数据库,而是与表示数据库和表的实体类进行交互。通过对象关系设计器或运行 SqlMetal.exe 实用工具可生成实体类。有关更多信息,请参见对象关系设计器(O/R 设计器)或代码生成工具 (SqlMetal.exe)。创建的实体类通常位于 Web 应用程序的 App_Code 文件夹中。O/R 设计器或 SqlMetal.exe 实用工具将生成一个表示数据库的类,并为该数据库中的每个表生成一个类。
表示数据库的类将负责检索和设置数据源中的值。LinqDataSource 控件读取和设置表示数据表的类中的属性。若要支持更新、插入和删除操作,数据库类必须从 DataContext 类派生,且表类必须引用 Table<TEntity> 类。
通过将 ContextTypeName 属性设置为表示数据库的类的名称,将 LinqDataSource 控件连接到数据库类。通过将 TableName 属性设置为代表数据表的类的名称,将 LinqDataSource 控件连接到特定表。例如,若要连接到 AdventureWorks 数据库中的 Contacts 表,可将 ContextTypeName属性设置为 AdventureWorksDataContext(或您为数据库对象指定的任何名称)。将 TableName 属性设置为 Contacts。下面的示例显示连接到 AdventureWorks 数据库的 LinqDataSource 控件的标记。
<asp:LinqDataSource ContextTypeName="AdventureWorksDataContext" TableName="Contacts" ID="LinqDataSource1" runat="server"> </asp:LinqDataSource>
此示例不显示由 O/R 设计器生成的类,因为生成的代码对于本主题来说太长。不过,若要此示例正常运行,生成的代码必须存在。有关更多信息,请参见 LINQ to SQL 中的代码生成。
连接到内存中的集合中的数据
当连接到内存中的数据集合(与数组类似)时,将 ContextTypeName 属性设置为包含该集合的类的名称。将 TableName 属性设置为集合本身的名称。
下面的示例显示一个类,其中包含一个字符串值数组
public class MovieLibrary { string[] _availableGenres = { "Comedy", "Drama", "Romance" }; public MovieLibrary() { } public string[] AvailableGenres { get { return _availableGenres; } } }下面的代码显示一个 LinqDataSource 控件,该控件从上一示例中的类读取影片流派列表。若要检索流派数组,请将 ContextTypeName 属性设置为 MovieLibrary ,并将 TableName 属性设置为 AvailableGenres 。
<asp:LinqDataSource ContextTypeName="MovieLibrary" TableName="AvailableGenres" ID="LinqDataSource1" runat="server"> </asp:LinqDataSource>
将 LinqDataSource 控件与数据绑定控件一起使用
若要显示 LinqDataSource 控件中的数据,可将数据绑定控件绑定到 LinqDataSource 控件。例如,将 DetailsView 控件、GridView 控件或ListView 控件绑定到 LinqDataSource 控件。为此,将数据绑定控件的 DataSourceID 属性设置为 LinqDataSource 控件的 ID。下面的示例说明一个 GridView 控件,该控件显示 LinqDataSource 控件中的所有数据。
<asp:LinqDataSource runat="server" ContextTypeName="AdventureWorksDataContext" TableName="Contacts" ID="LinqDataSource1"> </asp:LinqDataSource> <asp:GridView ID="GridView1" runat="server" DataSourceID="LinqDataSource1" > </asp:GridView>
数据绑定控件将自动创建用户界面以显示 LinqDataSource 控件中的数据。它还提供用于对数据进行排序和分页的界面。在启用数据修改后,数据绑定控件会提供用于更新、插入和删除记录的界面。
通过将数据绑定控件配置为不自动生成数据控件字段,可以限制显示的数据(属性)。然后可以在数据绑定控件中显式定义这些字段。虽然LinqDataSource 控件会检索所有属性,但数据绑定控件仅显示指定的属性。下面的示例演示一个 GridView 控件,该控件仅显示 AdventureWorks 数据库的 Products 表中的 Name 和 StandardCost 属性。AutoGenerateColumns 属性设置为 false。
<asp:LinqDataSource ContextTypeName="AdventureWorksDataContext" TableName="Products" ID="LinqDataSource1" runat="server"> </asp:LinqDataSource> <asp:GridView DataSourceID="LinqDataSource1" AutoGenerateColumns="false" ID="GridView1" runat="server"> <Columns> <asp:BoundField DataField="Name" /> <asp:BoundField DataField="StandardCost" /> </Columns> </asp:GridView>
如果必须限制查询中返回的属性,请通过设置 LinqDataSource 控件的 Select 属性来定义那些属性。
将 LinqDataSource 控件与其他数据源控件进行比较
与使用 SqlDataSource 或 ObjectDataSource 控件相比,通过使用 LinqDataSource 控件,可以编写较少的代码来执行数据操作。LinqDataSource控件可推断有关要连接到的数据源的信息,并动态创建用于选择、更新、插入和删除数据的命令。当使用 LinqDataSource 控件时,您只需了解一个编程模型就可以与不同类型的数据源进行交互。
比较 SqlDataSource 控件
与 SqlDataSource 控件不同(该控件仅可用于关系数据库表),使用 LinqDataSource 控件可连接到存储在内存中的集合中的数据。当使用SqlDataSource 控件时,必须将 SelectCommand、UpdateCommand、InsertCommand 和 DeleteCommand 属性显式设置为 SQL 查询。不过,借助于 LinqDataSource 控件,您就无需显式设置这些命令,因为 LinqDataSource 控件将使用 LINQ to SQL 自动创建它们。如果希望修改从数据源中选择的列,则不必编写完整的 SQL Select 命令,只需在 Select 属性中提供要在查询中返回的列名称即可。
当更新或插入数据时,无需为将保存到数据库中的每个值创建参数。LinqDataSource 控件可创建包含适当值的更新命令,方法是将 DataField 属性与实体类中的属性名进行匹配。
比较 ObjectDataSource 控件
当使用 ObjectDataSource 控件时,必须手动创建表示数据的对象,然后编写用于与数据进行交互的方法。然后,必须将SelectMethod、UpdateMethod、InsertMethod 和 DeleteMethod 属性与执行这些函数的方法进行匹配。在 LinqDataSource 控件中,可使用 O/R 设计器自动创建表示数据的类。无需编写代码来指定数据库表中存在哪些列或指定如何选择、更新、插入和删除数据。此外,还可以使用LinqDataSource 控件以类似于数组的方式与数据集合直接进行交互。在此情况下,无需创建一个类来处理与数据集合进行交互的逻辑。
选择数据
如果不指定 LinqDataSource 控件的 Select 属性的值,则检索数据源类中的所有属性。例如,LinqDataSource 控件为数据库表中的每个列返回一个值。
通过将 Select 属性设置为所需属性的名称,可以限制从数据源中检索的属性。如果希望仅返回一个属性,请将 Select 属性设置为该属性。例如,若要仅返回数据库表的 City 列中的值,请将 Select 属性设置为 City。LinqDataSource 控件将返回 List<T> 集合,该集合包含属性中正确键入的项。如果以文本(字符串)形式键入 City 属性,则选择 City 属性会返回字符串值的 List<T> 集合。
若要仅检索数据类中的一些属性,请使用 Select 属性中的 new 函数并指定要返回的列。由于您是在动态创建仅包含已指定的属性的类,因此 new函数是必需的。例如,如果要从包含完整地址的数据源中检索 City 和 PostalCode 属性,请将 Select 属性设置为 new(City, PostalCode)。LinqDataSource 控件将返回 List<T> 集合,该集合包含具有这些属性的类的实例。
当您仅选择一个属性时,无需使用 new 函数,因为返回的对象是该属性的值的简单集合。但对于多个属性,LinqDataSource 控件必须创建一个包含您指定的属性的新类。
使用 Select 子句计算值
可以在 Select 子句中计算值。例如,若要计算某个订单的行项总计,请将 Select 属性设置为 new(SalesOrderDetailID, OrderQty * UnitPrice As LineItemTotal)。使用 As 关键字可为计算的值分配一个名称(别名)。有关更多信息,请参见演练:使用 LinqDataSource 和 GridView 控件选择和筛选数据子集。
下面的示例演示如何使用 LinqDataSource 控件检索数据的子集。在此示例中,将设置 Select 属性以便为返回的值分配别名并计算值。
<asp:LinqDataSource ContextTypeName="ExampleDataContext" TableName="OrderDetails" Select="new(SalesOrderDetailID As DetailID, OrderQty * UnitPrice As LineItemTotal, DateCreated As SaleDate)" ID="LinqDataSource1" runat="server"> </asp:LinqDataSource>
使用 Where 子句筛选数据
可以对返回的数据进行筛选,以便仅检索满足特定条件的记录。可以通过将 Where 属性设置为要在返回的数据中包含某个记录所必须满足的条件来做到这一点。如果不指定 Where 属性的值,则检索数据源中的所有记录。可通过创建筛选器表达式进行筛选,该表达式通过比较来确定是否应包含某个记录。比较的对象可以是一个静态值,也可以是您通过参数占位符指定的变量值。
使用静态值创建 Where 子句
当您将一个属性中的值与静态值进行比较时,将使用该属性和静态值定义 Where 属性。例如,若要仅返回其 ListPrice 值大于 1000 的记录,请将Where 属性设置为 ListPrice > 1000。
可以使用 && 或 and 运算符表示逻辑“与”,也可以使用 || 或 or 运算符表示逻辑“或”。例如,将 Where 属性设置为 ListPrice > 1000 || UnitCost > 500 || DaysToManufacture > 3 可返回符合以下条件的记录:ListPrice 值大于 1000,或 UnitCost 值大于 500,或DaysToManufacture 值大于 3。若要指定必须在所有条件为真时才返回记录,则应将 Where 属性设置为 ListPrice > 1000 && UnitCost > 500 && DaysToManufacture > 3。
当比较字符串值时,必须用单引号将条件括起来,并用双引号将文本值括起来。例如,将 Where 属性设置为 'Category = "Sports"' 可仅检索其Category 列等于“Sports”的记录。
下面的示例演示一个 LinqDataSource 控件,该控件检索已按照字符串值和数值筛选的数据。
<asp:LinqDataSource ContextTypeName="ExampleDataContext" TableName="Product" Where='Category = "Sports" && Weight < 10' ID="LinqDataSource1" runat="server" </asp:LinqDataSource>
创建参数化 Where 子句
如果要将属性值与仅在运行时才知道的值进行比较,可以在 WhereParameters 属性集合中定义一个参数。例如,如果要使用由用户提供的值进行筛选,请创建表示该值的参数。LinqDataSource 控件使用参数的当前值创建 Where 子句。
下面的示例演示一个 LinqDataSource 控件,该控件根据用户在名为 DropDownList1 的控件中的选择检索数据。
<asp:DropDownList AutoPostBack="true" ID="DropDownList1" runat="server"> <asp:ListItem Value="Sports">Sports</asp:ListItem> <asp:ListItem Value="Garden">Garden</asp:ListItem> <asp:ListItem Value="Auto">Auto</asp:ListItem> </asp:DropDownList> <asp:LinqDataSource ContextTypeName="ExampleDataContext" TableName="Products" AutoGenerateWhereClause="true" ID="LinqDataSource1" runat="server"> <WhereParameters> <asp:ControlParameter Name="Category" ControlID="DropDownList1" Type="String" /> </WhereParameters> </asp:LinqDataSource> <asp:GridView DataSourceID="LinqDataSource1" ID="GridView1" runat="server"> </asp:GridView>
将 AutoGenerateWhereClause 属性设置为 true 时,LinqDataSource 控件会自动创建 Where 子句。当您具有多个参数时,此选项很有用,原因是您无需在 Where 属性中指定每个条件。您可以改为在 WhereParameters 属性集合中添加参数,这样 LinqDataSource 控件就会创建包含每个参数的 Where 子句。
当将 AutoGenerateWhereClause 属性设置为 true 时,参数的名称必须与相应属性的名称匹配。例如,若要针对 Category 属性检查参数的值,则必须将该参数命名为 Category。所有比较都是针对是否相等而进行的;无法测试一个值是大于还是小于参数值。在 WhereParameters 集合中指定多个参数时,这些参数将用逻辑“与”进行链接。
如果必须进行不相等检查或用逻辑“或”链接条件,请将 AutoGenerateWhereClause 属性设置为 false。然后可以在 Where 属性中定义这些条件。在 Where 属性中为每个参数包含一个占位符。
下面的示例显示如何在筛选数据时进行不相等测试。
<asp:DropDownList AutoPostBack="true" ID="DropDownList1" runat="server"> <asp:ListItem Value="0">0</asp:ListItem> <asp:ListItem Value="25">25</asp:ListItem> <asp:ListItem Value="100">100</asp:ListItem> <asp:ListItem Value="400">400</asp:ListItem> </asp:DropDownList> <asp:LinqDataSource ContextTypeName="ExampleDataContext" TableName="Products" Where="Price > @UserPrice" ID="LinqDataSource1" runat="server"> <WhereParameters> <asp:ControlParameter Name="UserPrice" DefaultValue="0" ControlID="DropDownList1" Type="Int32" /> </WhereParameters> </asp:LinqDataSource> <asp:GridView DataSourceID="LinqDataSource1" ID="GridView1" runat="server"> </asp:GridView>
有关更多信息,请参见 AutoGenerateWhereClause。
对数据进行分组和聚合
可以对数据进行分组以便合并记录的数据,这些记录将公共值包含在一个或多个列中。通过将 GroupBy 属性设置为要用于合并数据的属性的名称,可做到这一点。例如,若要对包含地址信息的表中的具有同一城市值的记录进行分组,请将 GroupBy 设置为 City。
通过将聚合函数与 GroupBy 属性结合使用,可以根据已分组的数据计算值(如某个属性的平均值或总和)。可通过引用 Key 对象来检索用于分组的值。
下面的示例演示如何对名为 ProductCategory 的属性上的数据进行分组。通过在 Select 属性中包含 Key,可检索已分组的值。Average 和 Count聚合方法也包含在 Select 属性中。
<asp:LinqDataSource ContextTypeName="ExampleDataContext" TableName="Products" GroupBy="ProductCategory" Select="new(Key, Average(ListPrice) As AverageListPrice, Average(Cost) As AverageCost, Count() As RecordCount)" ID="LinqDataSource1" runat="server"> </asp:LinqDataSource>
通过使用 It 关键字,可检索组中的单个记录。有关更多信息,请参见如何:使用 LinqDataSource 控件对数据进行分组和聚合。
聚合方法
下表列出了在使用 LinqDataSource 控件时可使用的聚合方法。
聚合函数 | 说明 |
---|---|
Count() | 返回一组数据的记录总数。 |
Average(列) | 返回所有返回的记录的指定列的平均值。 |
Sum(列) | 返回将所有返回的记录指定列中的所有值相加得到的值。 |
Max(列) | 返回所有返回的记录的指定列的最大值。 |
Min(列) | 返回所有返回的记录的指定列的最小值。 |
Where(条件) | 根据指定条件筛选返回的记录。 |
Any() | 确定集合中是否包含任何记录。 |
All(条件) | 确定集合中的所有记录是否满足指定条件。 |
-
有关更多信息,请参见如何:使用 LinqDataSource 控件对数据进行分组和聚合。
更新、插入和删除数据
可以将 LinqDataSource 控件配置为自动创建用于更新、插入和删除数据的命令。若要启用自动数据更新,请将 EnableUpdate、EnableInsert 或EnableDelete 属性设置为 true。
说明: |
---|
如果希望 LinqDataSource 控件自动生成更新命令,则不能设置 Select 属性。设置 Select 属性之后,LinqDataSource 控件会返回一个对象,此对象是动态类的实例,而不是表示数据库表的类的实例。因此,动态类无法推断如何更新数据库表中的值。 |
如果希望以编程方式设置要更新的任何值,则可以为 Updating、Inserting 或 Deleting 事件创建事件处理程序。在处理程序中,可以在数据操作开始之前设置一个值。有关更多信息,请参见如何:使用 LinqDataSource 控件更新、插入和删除数据。
对数据进行排序
LinqDataSource 对象支持两种通过查询对数据排序的方法。在开发网页时,可以按照静态值对数据进行排序。也可允许用户在运行时对数据进行动态排序。
若要根据静态值对数据进行排序,请为 OrderBy 属性分配某个属性的名称。若要允许用户在运行时对数据进行排序,请将 AutoSort 属性设置为true(默认值)。然后,将一个排序表达式传递给 LinqDataSource 控件。当数据绑定控件(如 GridView 控件)的 AllowSorting 属性设置为 true时,它将传递一个排序表达式。
若要在 OrderBy 属性中指定多个列名称,请用逗号将这些名称隔开。例如,如果指定“LastName, FirstName”,则首先按照 LastName 对记录进行排序,然后按照 FirstName 对其 LastName 字段中包含匹配值的记录进行排序。
如果希望先按照某个特定顺序返回数据,然后让用户更改此顺序,则这两种排序方法均可使用。在此情况下,将 AutoSort 属性设置为 true,并将OrderBy 属性设置为某个属性的名称。
下面的示例演示一个 LinqDataSource 控件,该控件按照 LastName、FirstName 和 MiddleName 的先后顺序对记录进行排序。LinqDataSource控件还配置为允许用户对行进行动态排序。可以将数据控件(如 GridView 控件)绑定到 LinqDataSource 控件,以便显示数据并允许用户指定排序顺序。
<asp:LinqDataSource ContextTypeName="ExampleDataContext" TableName="Contact" OrderBy="LastName, FirstName, MiddleName" AutoSort="true" ID="LinqDataSource1" runat="server" </asp:LinqDataSource>
使用参数动态计算值
在使用 LinqDataSource 控件时,使用参数可指定运行时必须解释或转换的值。与使用其他数据源控件不同,您无需指定作为更新、插入或删除操作的一部分的每个值。LinqDataSource 控件会设置这些值并使用 LINQ to SQL 生成 SQL 命令。仅指定用于提供默认值或转换空值的参数。也可以使用 WhereParameters 和 OrderByParameters 参数集合,在运行时根据值对数据进行排序或筛选。有关 LINQ to SQL 的更多信息,请参见 LINQ to SQL。
LinqDataSource 控件包含以下参数集合:
有关如何使用 WhereParameters 集合以允许用户动态筛选从 LinqDataSource 控件返回的记录的示例,请参见本主题前面的使用 Where 子句筛选数据。
并发控制
当允许用户更新或删除数据时,您可能希望确保在继续更新或删除操作之前,数据源中的数据尚未被另一个进程更改。如果不检查值是否已更改,则可能会无意中覆盖另一个进程设置的值,并使数据处于不一致的状态。
使用 LinqDataSource 控件可确定数据是否已更改。该控件将原始数据值存储在网页的视图状态中。当回发网页时,该网页将包含原始值和任何更新的值。LinqDataSource 控件使用 LINQ to SQL 以将原始值与数据源中的当前值进行比较。如果这些值相同,则表示数据尚未更改,且 LINQ to SQL 会更新或删除数据。如果数据已更改,则 LINQ to SQL 会引发异常。
通过设置实体类中的某个列的 UpdateCheck 属性,可以手动指定要检查的列值。当 O/R 设计器为数据库表生成代码时,对于由数据库管理的列,它会将 UpdateCheck 属性设置为 Never。任何其他列的值将设置为 Always,这表示在并发检查中始终包含该列。将 UpdateCheck 属性设置为Never 可阻止将该列包含在并发检查中。将该属性设置为 Never 还可以防止将该列中的值存储在视图状态中。将 UpdateCheck 属性设置为WhenChanged 时,将只有在用户更改值后才根据数据源检查该值。
如果必须将敏感数据存储在视图状态中,则应对视图状态进行加密。有关更多信息,请参见 Encrypt ViewState in ASP.NET 2.0(在 ASP.NET 2.0 中加密视图状态)。
说明: |
---|
对视图状态进行加密会影响网页的性能。 |
优化对 SQL Server 数据的并发检查
在视图状态中存储很多值会增加网页的大小,并有可能会向用户公开敏感数据。如果使用的是 SQL Server 数据库中的数据,则可通过在数据库中创建一个包含时间戳值的列来提高网页的性能和安全。每当修改记录时,SQL Server 都会自动更新时间戳列。在此情况下,LinqDataSource 控件无需比较某个记录中的每个列来确定该记录是否已更改。实际上,它只需将视图状态中的时间戳与数据库中的时间戳进行比较即可。
如果在 SQL Server 数据库中添加时间戳列,则 O/R 设计器会自动创建实体类,以便仅将时间戳存储在视图状态中。有关更多信息,请参见演练:对 LinqDataSource 控件使用时间戳以检查数据完整性。
使用存储过程
若要使用 LinqDataSource 控件从存储过程中检索数据,可以为 Selecting 事件创建处理程序。在事件处理程序中,应调用表示该存储过程的数据上下文类的方法。随后,应将存储过程的结果设置为 LinqDataSourceSelectEventArgs 对象的 Result 属性。如果要启用自动更新、插入和删除操作,则该方法返回的类型必须与 TableName 属性中指定的类型匹配。
下面的示例演示如何将 Result 属性分配给从表示存储过程的方法返回的对象。
protected void LinqDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e) { ExampleDataContext exampleContext = new ExampleDataContext(); e.Result = exampleContext.GetRegisteredCustomers(); }
有关创建数据上下文方法的更多信息,请参见如何:创建映射到存储过程和函数的 DataContext 方法(O/R 设计器)。
在修改数据时验证值
修改数据记录之前,可能需要验证记录的值。通常情况下,验证检查包括在数据类中,而不是网页中。通过将验证检查集中在数据类中,可确保数据类的使用方式不会影响验证检查的使用。有关如何向类中添加验证的更多信息,请参见如何:在实体类中添加验证和演练:向实体类添加验证。
验证异常将在更新、插入或删除数据之前引发。若要检索验证异常,可以为 Inserting、Updating 和 Deleting 事件创建处理程序。有关更多信息,请参见 LinqDataSourceUpdateEventArgs、LinqDataSourceInsertEventArgs 和 LinqDataSourceDeleteEventArgs 类。
LinqDataSource 控件事件
LinqDataSource 控件将在其处理过程中的特定时间点引发事件,以使您能够自定义如何选择、插入、更新或删除数据。
当 LinqDataSource 控件选择数据时,将引发以下事件(按此顺序):
-
ContextCreating(如果需要)
-
ContextCreated(如果需要)
如果以编程方式在 Selecting 事件中创建上下文对象,且无需将原始值存储在视图状态中,则将跳过 ContextCreating 和 ContextCreated 事件。
当 LinqDataSource 控件更新、插入或删除数据时,将引发以下事件(按此顺序):
更新、删除和插入操作的事件顺序与选择操作的事件顺序不同。这是因为 LinqDataSource 控件必须获取数据对象的实例,并将该实例传递给Inserting、Updating 或 Deleting 事件。
在执行数据操作之前,将引发 Selecting、Inserting、Updating 和 Deleting 事件。为这些事件创建事件处理程序以便在操作之前验证和修改值或取消操作。例如,如果数据库包含一个用于存储上一次更改记录的用户的列,则可以使用 Updating 事件以编程方式设置用户名值。
在操作完成之后,将引发 Selected、Inserted、Updated 和 Deleted 事件。为这些事件创建事件处理程序,以便捕获异常并检查从操作中返回的值。
在 LinqDataSource 控件创建 ContextTypeName 属性中指定的类型之前,将引发 ContextCreating 事件。如果希望以编程方式创建上下文类型,请处理此事件。例如,如果上下文类型的构造函数方法需要参数,则可以这样做。在创建 ContextTypeName 属性中指定的类型之后,将引发ContextCreated 事件。处理此事件以捕获异常或检查已创建的上下文对象。在 LinqDataSource 控件释放 ContextTypeName 属性中指定的上下文类型之前,将引发 ContextDisposing 事件。可以处理此事件以便取消释放在时间或资源方面需要很大开销才能创建的对象。也可以使用该事件在销毁对象前执行特定于该对象的清理操作。
下表列出了与 LinqDataSource 类相关的关键类。
成员 | 说明 |
---|---|
将 LINQ 表达式应用于数据源,并表示数据绑定控件的数据。 | |
支持 LinqDataSource 控件并提供一个接口,使数据绑定控件可以对数据对象执行数据操作。此类主要由数据绑定控件使用,而不是作为页代码中的可编程对象。 | |
提供 ContextDisposing 事件的数据。 | |
提供 ContextCreating 事件的数据。 | |
提供 Deleting 事件的数据。 | |
提供 Inserting 事件的数据。 | |
提供 Selecting 事件的数据。 | |
为 ContextCreated、Deleted、Inserted、Selected 和 Updated 事件提供数据。 | |
提供 Updating 事件的数据。 |