演练:简单对象模型和查询 (Visual Basic)
本演练提供了复杂性最小的基本端对端 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 属性指定数据库中的表的名称。
创建一个实体类并将其映射到数据库表
将下面的代码键入或粘贴到
Sub Main
上方紧靠它的 Module1.vb 中。<Table(Name:="Customers")> _ Public Class Customer End Class
指定类中的属性表示数据库列
在此步骤中,你要完成几项任务。
您要使用 ColumnAttribute 属性 (Attribute) 指定实体类中的
CustomerID
和City
属性 (Property) 表示数据库表中的列。您要指定
CustomerID
属性表示数据库中的主键列。您要指定
_CustomerID
和_City
字段用作私有存储字段。 然后,LINQ to SQL 就可以直接存储和检索值,而不用使用可能包含业务逻辑的公共访问器。
表示两个数据库列的特性
将下面的代码键入或粘贴到
End Class
前面紧靠它的 Module1.vb 中。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 如何跨表进行查询,这种查询与关系数据库中的联接类似。
如果您希望进行“跨关系进行查询”演练,请务必保存您刚完成的演练的解决方案,这是一项必备条件。