当在 ASP.NET 中处理数据时,可从使用通用软件模式中受益。其中一种模式是将数据访问代码与控制数据访问或提供其他业务规则的业务逻辑代码分开。在此模式中,这两个层均与表示层分离。表示层由网站用户有权查看或更改数据的页面组成。
ASP.NET 可通过多种方式提供数据访问、业务逻辑和表示形式之间的分离。例如,数据源模型(包括 LinqDataSource 和 ObjectDataSource 等服务器控件)可将表示层与数据访问代码和业务逻辑分离。
另一种模式是将数据访问逻辑直接包括在 ASP.NET 页(表示层)中。例如,可以在 ASP.NET 页的代码隐藏页中编写 ADO.NET 代码,或者使用 SqlDataSource 控件。此方法可将数据访问逻辑与表示层紧密耦合在一起。
建议的方法是将数据访问逻辑与表示层分离。此分离层称为数据访问层。数据访问层可实现为单独的类库项目。但是,您也可以使用 Visual Web Developer 中的工具生成数据访问层。
说明: |
---|
在 Microsoft Visual Web Developer 速成版中,不能创建类库项目。但是,您可以先使用 Visual Basic 速成版或 Visual C# 速成版创建单独的项目,然后再将该类的输出作为程序集 (DLL) 包括在网站中。 |
如果网站要显示或更新数据,则应先创建数据访问层和业务逻辑层,然后再创建用户界面。
数据驱动的 Web 应用程序通常使用表示数据的类型化数据集或实体类来添加数据访问层。它还包含强制实施自定义业务规则的业务逻辑层。最后,它使用 ASP.NET 页添加表示层,并通过母版页和主题创建通用的页面布局。本演练演示如何创建数据访问层。
数据访问层包含特定于基础数据源的所有代码。其中包括创建数据库连接的代码,以及发出 Select、Insert、Update 和 Delete 命令的代码。数据访问层通常包含用于实现访问基础数据库数据的方法的类。表示层不直接处理数据,而是为所有数据请求调用数据访问层中的类和方法。
本演练涉及以下任务:
创建 SQL 数据库和添加数据。
添加充当数据访问层的“Linq to SQL”文件。
创建用作表示层的页面。
向页面中添加在表示层和数据访问层之间通信的 LinqDataSource 控件。
若要完成此演练,需要以下组件:
Microsoft Visual Studio 2008 或 Microsoft Visual Web Developer 速成版。有关下载信息,请参见 Visual Studio Developer Center(Visual Studio 开发中心)网站。
.NET Framework 3.5 版。
SQL Server Express Edition。如果已安装 Microsoft SQL Server,则也可以直接使用该软件。
第一步是创建网站。
创建新的文件系统网站
打开 Visual Studio 2008 或 Visual Web Developer 速成版。
-
在“文件”菜单中单击“新建网站”。
显示“新建网站”对话框。
在“Visual Studio 已安装的模板”下选择“ASP.NET 网站”。
-
在“位置”框中单击“文件系统”,然后键入要在其中保存网站文件的文件夹的名称。
例如,键入“C:\BasicWebSite”。
-
在“语言”列表中,单击“Visual Basic”或“Visual C#”,然后单击“确定”。
说明: 您选择的编程语言将成为网站的默认编程语言。但是,也可以为每个页单独设置编程语言。
Visual Web Developer 将创建该文件夹以及名为 Default.aspx 的新页。
下一步是使用“服务器资源管理器”窗口连接至 Visual Web Developer 中的数据库(在 Visual Web Developer 速成版中,该窗口名为“数据库资源管理器”)。通过在“服务器资源管理器”中创建数据库连接,可以添加表、存储过程、视图及其他数据库元素,所有这一切都在 Visual Studio 中进行。另外,您还可以查看表数据或创建查询,此操作可手动完成,也可以使用查询生成器窗口完成。
在本演练后面将为数据访问层生成类型化数据集,届时必须在 Visual Web Developer 中创建指向数据库的连接。您可以手动提供连接信息。但是,Visual Web Developer 可以简化此过程,因为它会自动填充已在“服务器资源管理器”中注册的数据库列表。
在本演练中,将创建一个新数据库以跟踪各个任务项。
在本节中,将创建一个新的 SQL Server Express 数据库,以存储待办事项列表中的任务信息。
向网站中添加数据库
-
在“解决方案资源管理器”中,右击网站的名称,然后单击“添加新项”。
将显示“添加新项”窗口。
选择“SQL 数据库”,并将数据库命名为“Tasks.mdf”。
单击“确定”。
当 Visual Web Developer 询问是否应将该数据库存储在 App_Data 文件夹中时,请单击“是”。
为 Tasks 数据库创建架构和示例数据
您可以使用数据库设计和编辑功能为存储任务项的表创建架构。
为 Tasks 数据库定义架构并添加数据
-
在“解决方案资源管理器”中打开“App_Data”文件夹,然后双击 Tasks.mdf。
随即将在“服务器资源管理器”中打开“Tasks”数据库节点。
-
右击“表”文件夹,然后单击“添加新表”。
将显示表定义窗口。
-
在表中创建以下列:
列名
数据类型
属性
taskId
int
不为 null
name
nvarchar(50)
不为 null
dateCreated
datetime
不为 null
isComplete
bit
不为 null
选择 taskId 列所在的行,右击该行,然后单击“设置主键”。
选择 taskid 行,然后在“列属性”窗口中找到“标识规范”[Identify Specification]部分。
打开该部分,然后将“(是标识)”设置为“是”。
保存该表,将其命名为“TasksList”,然后关闭表定义窗口。
-
在“服务器资源管理器”中右击该表,然后单击“显示表数据”。
将显示一个编辑窗口,您可以在其中查看、添加和编辑数据。
-
向该表中添加四到五个记录。
您无需指定 taskId 列的值,因为它是标识列,所以会被自动赋值。
关闭编辑窗口。
若要为刚才创建的数据库创建数据访问层和业务逻辑层,可以有多种方式。在本演练中,将创建一个表示数据库实体的类。随后,您可以将自己的业务逻辑添加到这些生成的类中(在本演练中,将不向类中添加业务逻辑)。
在本演练中,将使用语言集成查询 (LINQ) 处理数据。LINQ 将面向对象的编程原则应用于关系数据。LINQ 提供了一种用于在不同类型的数据源中查询和更新数据的统一编程模型,并将数据功能直接扩展到 C# 和 Visual Basic 语言中。有关 LINQ 的更多信息,请参见语言集成查询 (LINQ)。
您将使用 LINQ to SQL 类作为数据访问层。此外,还要使用 Visual Web Developer 中的“对象关系设计器”窗口生成表示数据的实体类。
将 Tasks 数据库映射到 SQL 数据上下文类
若要创建数据访问层,首先要向项目中添加类型化数据集。
创建 Tasks 表的类
如果网站中还没有 App_Code 文件夹,请在“解决方案资源管理器”中右击相应的项目,再单击“添加 ASP.NET 文件夹”,然后单击“App_Code”。
-
右击 App_Code 文件夹,然后单击“添加新项”。
显示“添加新项”对话框。
在“Visual Studio 已安装的模板”下,选择“LINQ to SQL 类”模板,然后将该文件重命名为“Tasks.dbml”。
-
单击“添加”。
此时将显示“对象关系设计器”窗口。
在“服务器资源管理器”中,将 TasksList 表拖到“对象关系设计器”窗口中。
-
保存 Tasks.dbml 文件。
Visual Web Developer 将在“App_Code”文件夹中 Tasks.dbml 的下方创建 Tasks.dbml.layout 文件。此外,它还会创建 Tasks.designer.cs 或 Tasks.designer.vb,具体取决于您所使用的编程语言。
-
在“解决方案资源管理器”中,打开 Tasks.designer.cs 或 Tasks.designer.vb 文件。
请注意,该代码包含名为 TasksDataContext 和 TasksList 的类。TasksDataContext 类表示数据库,TasksList 类则表示数据库表。TasksDataContext 类的无参数构造函数将从网站的配置文件 (Web.config) 中读取数据库连接字符串。
-
打开 Web.config 文件。
请注意,Tasks 数据库的连接字符串已添加到 connectionStrings 元素中。
关闭类文件和 Web.config 文件。
现在您已拥有一个数据库表以及若干表示数据库实体的类,下面便可以使用 ASP.NET 网页上的 LinqDataSource 来访问数据库。LinqDataSource 控件通过 ASP.NET 数据源控件结构向 Web 开发人员提供 LINQ 功能。
LinqDataSource 控件用于创建在数据库中选择、插入、更新和删除对象的代码。业务逻辑可以调用这些类来执行数据库函数并应用业务逻辑规则。
创建和配置 LinqDataSource 控件
打开或切换到 Default.aspx 页。
切换到“设计”视图。
-
从“工具箱”的“数据”选项卡中,将 LinqDataSource 控件拖到网页上。
您可以将 ID 属性保留为 LinqDataSource1。
在“LinqDataSource 任务”[LinqDataSource Tasks]智能标记面板中,单击“配置数据源”。
在上下文对象列表中,选择“TasksDataContext”,然后单击“下一步”。
在列表中,选择“TasksList(表<TasksList>)”[TasksLists(Table<TasksList>)],然后单击“完成”。
-
在“LinqDataSource 任务”智能标记面板中,选中“启用删除”、“启用插入”和“启用更新”复选框。
请注意,您不必为选择数据指定任何数据库命令。
-
运行该页。
该页将显示您在本演练前面输入的数据。
本演练阐释了如何使用“LINQ to SQL 类”模板和 LinqDataSource 服务器控件创建应用程序的数据访问层和业务逻辑层。您为网站页访问数据创建了一种既灵活、又不直接绑定到网站表示层的方法。
主题演练:创建支持 AJAX 的数据应用程序使用 LinqDataSource 控件创建支持 AJAX 的 Web 应用程序,以用于显示和更新 Tasks 数据库中的信息。