使用语言集成查询 (LINQ) 访问 ASP.NET WebPages 中的数据 - 第 2 部分






2.94/5 (7投票s)
使用 ASP.NET 的 LinqDataSource 控件访问各种类型的数据
引言
本文的第二部分,也是最后一部分,是对文章使用语言集成查询 (LINQ) 访问 ASP.NET WebPages 中的数据 - 第 1 部分的续写。本部分将介绍如何使用对象关系设计器创建实体类来表示 SQL Server 数据库和表,并使用 LinqDataSource
控件在网页中显示数据。
LinqDataSource 控件
使用声明式标记,您可以创建一个 LinqDataSource
控件,该控件可以连接到 SQL 数据库表中的数据,并将其配置为处理数据更新、插入和删除,而无需编写执行这些任务的 SQL 命令。LinqDataSource
类还提供了一个事件模型,允许您处理自定义场景。要使用 LinqDataSource
控件查询数据库,必须创建实体对象来表示数据库及其表。您可以使用对象关系设计器或 SqlMetal.exe 工具来生成这些对象。
ContextTypeName
属性必须设置为表示数据库的对象,而 TableName
属性必须设置为表示数据库表的对象。
对象关系设计器
对象关系设计器 (O/R Designer) 提供了一个可视设计界面,用于根据数据库中的对象创建 LINQ to SQL 实体类和关联(关系)。换句话说,O/R Designer 用于在应用程序中创建与数据库中的对象映射的对象模型。O/R Designer 还提供了将存储过程和函数映射到 DataContext
方法的功能,用于返回数据和填充实体类。O/R Designer 还提供了设计实体类之间继承关系的功能。O/R Designer 目前仅支持 SQL Server 2000 及更高版本以及 SQL Server Express 数据库。
O/R Designer 的设计界面上有两个不同的区域:左侧的实体窗格和右侧的方法窗格。实体窗格是显示文件中定义的实体类的主要设计界面。方法窗格是显示映射到存储过程和函数的 DataContext
方法的設計界面。您可以隐藏方法窗格。使用方法窗格超出了本文的范围。
代码生成工具 (SqlMetal.Exe)
SqlMetal
命令行工具用于为 .NET Framework 的 LINQ to SQL 组件生成代码和映射。通过应用下面列出的选项,您可以指示 SqlMetal
执行多种不同的操作,包括:
从数据库生成源代码和映射属性或映射文件。
从数据库生成中间 DBML 文件用于自定义。
从 DBML 文件生成源代码和映射属性或映射文件。
默认情况下,该文件位于 [驱动器]:\program files\microsoft sdks\windows\v6.0A\bin。
>sqlmetal [options] [<input file>]
示例 1:要在 Visual Studio 命令提示符窗口中生成包含提取的 SQL 元数据的 .dbml 文件,请发出以下命令。
>sqlmetal /server:myserver /database:northwind /dbml:mymeta.dbml
示例 2:要从包含 SQL Server Express 的 .mdf 文件生成包含提取的 SQL 元数据的 .dbml 文件,请发出以下命令。
>sqlmetal /dbml:mymeta.dbml mydbfile.mdf
演练 2
使用 O/R Designer 和 LinqDataSource 连接 Sql Server Express 数据库,并在表上执行查询以在 ASP.NET 网页中显示数据
将一个新网页(Default2.aspx)添加到您刚刚创建的网站项目中,以测试演练 1 的示例。
在网站菜单中,选择“添加新项”命令,然后在对话框中从可用模板列表中选择“Linq to SQL 类”。它会在网站的 App_Code 文件夹中创建一个名为 DataClasses.dbml 的新实体类文件。
在将新的 LINQ to SQL 文件添加到项目后,空的设计界面代表一个已准备好进行配置的 DataContext
。DataContext
的名称与您为 .dbml 文件提供的名称相对应。在本演练中,因为您将 LINQ to SQL 文件命名为 DataClasses.dbml,所以 DataContext
的名称为 DataClassesDataContext
。您可以通过单击设计器上的空白区域并检查“属性”窗口来验证这一点。
下一步是通过将表从“服务器资源管理器/数据库资源管理器”拖到 O/R Designer 上来创建映射到数据库表的 LINQ to SQL 类。结果是一个映射到数据库中表的 LINQ to SQL 实体类。

在“服务器资源管理器/数据库资源管理器”中,找到本文使用的 sales.dbf 示例数据库的 SQL Server 版本中的表。
将“产品”节点从“服务器资源管理器/数据库资源管理器”拖到 O/R Designer 界面上。
将创建一个名为 Product
的实体类来表示 Product
表中的单个产品。它具有与 Product
表中的列对应的属性。
从工具箱中的“数据”选项卡将 LinqDataSource
控件(ID=LinqDataSource1
)拖到 Default2.aspx 页面中,并按照以下方式在“配置数据源”向导中进行配置,以访问您刚刚在项目中创建的数据源和查询。
- 选择“
DataClassDataContext
”作为上下文对象。
- 在“数据选择”中选择“
products
”作为表,并在“选择”列表中勾选所有出现的字段。 - 单击“完成”按钮以完成
LinqDataSource
控件的配置。
从工具箱中的“数据”选项卡将 GridView
控件(ID=GridView1
)拖到页面中,并将“数据源”属性设置为 LinqDataSource1
。
就是这样。现在运行网页,查看如下所示的输出。

结论
这篇分为两部分的文章基本介绍了如何使用 ASP.NET 2008 新版本提供的 LinqDataSource
控件连接到两种不同的数据源:对象数据集合和 SQL Server Express 数据库表。它还详细介绍了如何定义对象和实体类以及执行查询来显示数据。在接下来的文章中,我将探索更多关于使用 LINQ 与其他数据源的内容。