更新:November 2007 本演练提供了复杂性最小的基本端对端 LINQ to SQL 方案。您将创建一个可为示例 Northwind 数据库中的 Customers 表建模的实体类。然后您将创建一个简单查询,用于列出位于伦敦的客户。
本演练在设计上是面向代码的,以帮助说明 LINQ to SQL 概念。一般来说,您会使用 对象关系设计器 来创建对象模型。有关更多信息,请参见对象关系设计器(O/R 设计器).
说明: |
|---|
对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置。 |
本演练是使用 Visual C# 开发设置编写的。
本演练由六项主要任务组成:
此任务为第一项任务,在此任务中,您要创建一个 Visual Studio 解决方案,此解决方案包含生成和运行 LINQ to SQL 项目所必需的引用。
创建 LINQ to SQL 解决方案
-
在 Visual Studio 的“文件”菜单上指向“新建”,然后单击“项目”。
-
在“新建项目”对话框的“项目类型”窗格中,单击“Visual C#”。
-
在“模板”窗格中,单击“控制台应用程序”。
-
在“名称”框中键入 LinqConsoleApp。
-
在“位置”框中,确认要用于存储项目文件的位置。
-
单击“确定”。
本演练用到默认情况下您的项目中可能未安装的程序集。如果在您的项目中未将 System.Data.Linq 作为引用列出(在“解决方案资源管理器”中展开“引用”节点),请按照以下步骤中的说明添加它。
添加 System.Data.Linq
-
在“解决方案资源管理器”中,右击“引用”,然后单击“添加引用”。
-
在“添加引用”对话框中,依次单击“.NET”、System.Data.Linq 程序集和“确定”。
此程序集即被添加到项目中。
-
在“Program.cs”的顶部添加以下指令:
using System.Data.Linq;
using System.Data.Linq.Mapping;
在此步骤中,您将创建一个类,并将其映射到数据库表。这样的类称为“实体类”。请注意,只需添加 TableAttribute 属性即可实现映射。Name 属性指定数据库中的表的名称。
创建一个实体类并将其映射到数据库表
您将在此步骤中完成多项任务。
-
使用 ColumnAttribute 属性在实体类上指定 CustomerID 和 City 属性,用于表示数据库表中的列。
-
指定 CustomerID 属性,用于表示数据库中的主键列。
-
指定 _CustomerID 和 _City 字段作为私有存储区。然后 LINQ to SQL 可以直接存储和检索值,而不是使用可能包含业务逻辑的公共访问器。
表示两个数据库列的特性
在此步骤中,使用 DataContext 对象在基于代码的数据结构与数据库本身之间建立连接。DataContext 是用于从数据库检索对象和提交更改的主要通道。
您还可以针对数据库中的 Customers 表声明 Table<Customer> 作为查询的类型化逻辑表。您将在后续步骤中创建和执行这些查询。
指定数据库连接
在此步骤中,您将创建一个查询,用于确定数据库的 Customers 表中有哪些客户位于伦敦。此步骤中的查询代码只描述查询,而不执行查询。这种方法称为“延迟执行”。有关更多信息,请参见 LINQ 查询介绍。
您还将生成一个日志输出,用于显示 LINQ to SQL 生成的 SQL 命令。此日志记录功能(使用 Log)在调试过程中可以提供帮助,并有助于确定发送到数据库的命令是否准确地表示您的查询。
创建简单查询
在此步骤中,您将实际执行查询。您在前面步骤中创建的查询表达式只有在需要结果时才会进行计算。当您开始 foreach 迭代时,将会针对数据库执行 SQL 命令,并将对象具体化。
执行查询
-
将下面的代码键入或粘贴到 Main 方法的末尾(在查询说明之后)。
foreach (Customer cust in custQuery)
{
Console.WriteLine("ID={0}, City={1}", cust.CustomerID,
cust.City);
}
// Prevent console window from closing.
Console.ReadLine();
-
按 F5 调试该应用程序。
控制台窗口中的查询结果应显示如下:
ID=AROUT, City=London
ID=BSBEV, City=London
ID=CONSH, City=London
ID=EASTC, City=London
ID=NORTS, City=London
ID=SEVES, City=London
-
在控制台窗口中按 Enter 以关闭应用程序。
演练:跨关系查询 (C#) (LINQ to SQL) 主题将从本演练结束的位置继续。“跨关系查询”演练演示 LINQ to SQL 如何跨表查询,如同关系数据库中的联接。
如果您希望进行“跨关系查询”演练,请务必保存您刚完成演练的解决方案,这是“跨关系查询”演练的前提条件。
概念