本演练提供一个基本的端到端 LINQ to SQL 方案,但复杂性最低。 你将创建一个实体类,用于在示例 Northwind 数据库中为 Customers 表建模。 然后,你将创建一个简单的查询来列出位于伦敦的客户。
本演练是设计面向代码的,可帮助显示 LINQ to SQL 概念。 通常,你将使用对象关系设计器创建对象模型。
注释
计算机可能会在以下说明中显示某些 Visual Studio 用户界面元素的不同名称或位置。 你拥有的 Visual Studio 版本以及所使用的设置决定了这些元素。 有关更多信息,请参阅 自定义 IDE。
本演练是使用 Visual Basic 开发设置编写的。
先决条件
本演练使用专用文件夹(“c:\linqtest”)保存文件。 在开始演练之前创建此文件夹。
本演练需要 Northwind 示例数据库。 如果开发计算机上没有此数据库,可以从Microsoft下载站点下载它。 有关说明,请参阅 下载示例数据库。 下载数据库后,将文件复制到 c:\linqtest 文件夹。
概述
本演练由六个主要任务组成:
在 Visual Studio 中创建 LINQ to SQL 解决方案。
将类映射到数据库表。
指定类的属性来表示数据库列。
指定与 Northwind 数据库的连接。
创建针对该数据库运行的简单查询。
执行查询并观察结果。
创建 LINQ to SQL 解决方案
在此第一个任务中,你将创建一个 Visual Studio 解决方案,其中包含生成和运行 LINQ to SQL 项目所需的引用。
创建 LINQ to SQL 解决方案
在“文件”菜单上,单击“新建项目”。
在“新建项目”对话框的“项目类型”窗格中,单击“Visual Basic”。
在“ 模板 ”窗格中,单击“ 控制台应用程序”。
在 “名称 ”框中,键入 LinqConsoleApp。
单击 “确定” 。
添加 LINQ 引用和指令
本演练用到默认情况下您的项目中可能未安装的程序集。 如果System.Data.Linq
未在项目中列为引用项(请在解决方案资源管理器中单击"显示所有文件"并展开"引用"节点),请按照以下步骤添加。
添加 System.Data.Linq
在解决方案资源管理器中,右键点击引用,然后点击添加引用。
在“ 添加引用 ”对话框中,单击 .NET,单击 System.Data.Linq 程序集,然后单击“ 确定”。
此程序集即被添加到项目中。
此外,在“ 添加引用 ”对话框中,单击 “.NET”,滚动到“System.Windows.Forms”,然后单击“ 确定”。
本演练中支持消息框的此程序集将添加到项目中。
在
Module1
之上添加以下指令:Imports System.Data.Linq Imports System.Data.Linq.Mapping Imports System.Windows.Forms
将类映射到数据库表
在此步骤中,将创建一个类并将其映射到数据库表。 此类称为 实体类。 请注意,只需添加 TableAttribute 属性即可完成映射。 该 Name 属性指定数据库中表的名称。
创建实体类并将其映射到数据库表
将以下代码键入或粘贴到 Module1.vb 中的
Sub Main
上方:<Table(Name:="Customers")> _ Public Class Customer End Class
指定类的属性以表示数据库列
在此步骤中,你将完成多个任务。
使用 ColumnAttribute 特性来指定实体类中的
CustomerID
和City
属性,以表示数据库表中的列。指定
CustomerID
属性为数据库中的主键列。为专用存储指定
_CustomerID
和_City
字段。 然后,LINQ to SQL 可以直接存储和检索值,而不是使用可能包含业务逻辑的公共访问器。
表示两个数据库列的特征
键入或粘贴以下代码到 Module1.vb 中,紧靠在
End Class
之前。Private _CustomerID As String <Column(IsPrimaryKey:=True, Storage:="_CustomerID")> _ Public Property CustomerID() As String Get Return Me._CustomerID End Get Set(ByVal value As String) Me._CustomerID = value End Set End Property Private _City As String <Column(Storage:="_City")> _ Public Property City() As String Get Return Me._City End Get Set(ByVal value As String) Me._City = value End Set End Property
指定与 Northwind 数据库的连接
在此步骤中,将使用对象 DataContext 在基于代码的数据结构和数据库本身之间建立连接。 DataContext这是从数据库检索对象并提交更改的主通道。
您还需声明 Table(Of Customer)
,用作您针对数据库中 Customers 表的查询的逻辑、类型化表。 你将在稍后的步骤中创建和执行这些查询。
指定数据库连接
将以下代码键入或粘贴到方法中
Sub Main
。请注意,
northwnd.mdf
假定该文件位于 linqtest 文件夹中。 有关详细信息,请参阅本演练前面的先决条件部分。' Use a connection string. Dim db As New DataContext _ ("c:\linqtest\northwnd.mdf") ' Get a typed table to run queries. Dim Customers As Table(Of Customer) = _ db.GetTable(Of Customer)()
创建简单查询
在此步骤中,你将创建一个查询,以查找数据库 Customers 表中的哪些客户位于伦敦。 此步骤中的查询代码只是描述查询。 它不执行查询。 此方法称为 延迟执行。 有关详细信息,请参阅 LINQ 查询简介 (C#)。
你还将生成日志输出,以显示 LINQ to SQL 生成的 SQL 命令。 此日志记录功能(使用 Log)有助于调试,并确定要发送到数据库的命令准确表示查询。
创建简单查询
在
Sub Main
声明之后,在Table(Of Customer)
方法中键入或粘贴以下代码:' Attach the log to show generated SQL in a console window. db.Log = Console.Out ' Query for customers in London. Dim custQuery = _ From cust In Customers _ Where cust.City = "London" _ Select cust
执行查询
在此步骤中,您将实际执行查询。 在之前步骤中创建的查询表达式只有在需要结果时才会被评估。 开始 For Each
迭代时,将针对数据库执行 SQL 命令,并具体化对象。
执行查询
在方法末尾
Sub Main
键入或粘贴以下代码(在查询说明之后):' Format the message box. Dim msg As String = "", title As String = "London customers:", _ response As MsgBoxResult, style As MsgBoxStyle = _ MsgBoxStyle.Information ' Execute the query. For Each custObj In custQuery msg &= String.Format(custObj.CustomerID & vbCrLf) Next ' Display the results. response = MsgBox(msg, style, title)
按 F5 键调试应用程序。
注释
如果应用程序生成运行时错误,请参阅 演练学习的“故障排除”部分。
消息框显示六个客户的列表。 控制台窗口显示生成的 SQL 代码。
单击“ 确定 ”以消除消息框。
应用程序关闭。
在“文件” 菜单上,单击“全部保存” 。
如果您要继续下一演练,您将需要此应用程序。
后续步骤
演练:跨关系查询 (Visual Basic) 主题在本演练结束的位置继续。 “跨关系查询”演练演示了 LINQ to SQL 如何实现跨表查询,类似于关系数据库中的联接。
如果要执行跨关系查询演练,请确保为刚刚完成的演练保存解决方案,这是先决条件。